Формирование словаря. RegData

Обсуждение Stimulsoft Reports.NET
Сергей
Сообщения: 70
Зарегистрирован: 13 окт 2008, 03:56
Откуда: Пермь
Контактная информация:

Формирование словаря. RegData

Сообщение Сергей »

Для облегчения взаимопонимания отправил пример на суппорт [#EJC-461665].
доб.: странно, но Ticket ID система не узнала, присвоила новый [#EKB-502706].
Сергей
Сообщения: 70
Зарегистрирован: 13 окт 2008, 03:56
Откуда: Пермь
Контактная информация:

Формирование словаря. RegData

Сообщение Сергей »

Здравствуйте.

Ответ техподдержки поразил..

В примере был код:

Код: Выделить всё

string dbPath = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "StiDicErrorSampleDatabase.mdf");

StiReport report = new StiReport();
SqlConnection conn = new SqlConnection(string.Format(@"Data Source=.\SQLEXPRESS;AttachDbFilename={0};Integrated Security=True;User Instance=True", dbPath));
string name = "Это имя";
string alias = "Это алиас";
report.RegData(name, alias, conn);
StiSqlSource sss = new StiSqlSource(name, "Table1", "Table1", "SELECT * FROM [Table1]");
report.Dictionary.DataSources.Add(sss);
sss.SynchronizeColumns();

report.Design();
А вот ответ:
[quote="""Edward Pat (support@stimulsoft.com)"]Да, проблема с этим методом регистрации есть. Попробуйте так:

StiReport report = new StiReport();
StiSqlDatabase db = new StiSqlDatabase("MyConnection", @"Password=;Persist Security Info=False;Data Source=.\SqlExpress;Integrated Security=False;Initial Catalog=NORTHWIN;User ID=sa");
StiSqlSource mySource = new StiSqlSource("MyConnection", "MySource", "MySource", "exec CustOrderHist 'ALFKI'");
report.Dictionary.Databases.Add(db);
report.Dictionary.DataSources.Add(mySource);
mySource.SynchronizeColumns();
mySource.Parameters.Add(new StiDataParameter("@CustID", "\"ALFKI\"", (int)SqlDbType.VarChar , 5));
mySource.SqlCommand = "exec CustOrderHist @CustID";
[/quote]

Непонятно, почему БД NORTHWIND, запуск процедуры, какой-то параметр.. База же есть в проекте.
Не указано, где задавать имя-алиас для источника.

Попытки изменить этот код под себя привели лишь к нерабочему варианту. Пример, дополненный этим вариантом, отправил на суппорт.
Хотелось бы видеть рабочий код в данном примере.

Спасибо.
Anton Lozovskiy
Сообщения: 264
Зарегистрирован: 12 ноя 2007, 08:16

Формирование словаря. RegData

Сообщение Anton Lozovskiy »

Здравстуйте.

Исправить проблему метода регистрации словаря мы сейчас не можем. Но добавили опцию которая поможет вашей проблеме.
StiOptions.Dictionary.NotIdenticalNameAndAliasAtRegistrationOfNewData = true;

Патч будет доступен в следующем пререлиз билде от 24 августа 2009 года.

Спасибо.
Edward
Сообщения: 930
Зарегистрирован: 09 июн 2006, 12:23

Формирование словаря. RegData

Сообщение Edward »

Здравствуйте,

Извините за неточный ответ.

Вот этот код:

Код: Выделить всё

StiReport report = new StiReport();
StiSqlDatabase db = new StiSqlDatabase("MyConnection","My Alias", @"Password=;Persist Security Info=False;Data Source=.\SqlExpress;Integrated Security=False;Initial Catalog=NORTHWIN;User ID=sa");
StiSqlSource mySource = new StiSqlSource("MyConnection", "MySource", "MySource", "exec CustOrderHist 'ALFKI'");
report.Dictionary.Databases.Add(db);
report.Dictionary.DataSources.Add(mySource);
report.Dictionary.Synchronize();
mySource.SynchronizeColumns();
mySource.Parameters.Add(new StiDataParameter("@CustID", "\"ALFKI\"", (int)SqlDbType.VarChar , 5));
mySource.SqlCommand = "exec CustOrderHist @CustID";
приведен для тестовой базы NorthWind в SQL Server. Это вариант, который получит колонки и для хранимой процедуры и присвоит Alias для соединения с БД.

В Вашем случае достаточен вот этот код:

Код: Выделить всё

string name = "MyConnection";
string alias = "MyAlias";
StiSqlDatabase db = new StiSqlDatabase(name, alias, string.Format(@"Data Source=.\SQLEXPRESS;AttachDbFilename={0};Integrated Security=True;User Instance=True", dbPath));
StiSqlSource mySource = new StiSqlSource(name, "Table1","Table1", "SELECT * FROM Table1");
report.Dictionary.Databases.Add(db);
report.Dictionary.DataSources.Add(mySource);
report.Dictionary.Synchronize(); 
mySource.SynchronizeColumns();
Спасибо.
Сергей
Сообщения: 70
Зарегистрирован: 13 окт 2008, 03:56
Откуда: Пермь
Контактная информация:

Формирование словаря. RegData

Сообщение Сергей »

"Смешались в кучу кони, люди"

Здравствуйте.
Anton писал(а):Исправить проблему метода регистрации словаря мы сейчас не можем. Но добавили опцию которая поможет вашей проблеме.
StiOptions.Dictionary.NotIdenticalNameAndAliasAtRegistrationOfNewData = true;
Скачал последний билд, проверил.. Оба варианта из примера теперь работают, конечно.. Вот только в первом случае видно лишь имя, а во втором лишь алиас (ощущение, что имя просто подменяется на него). Нам же нужны и имя и алиас. Смысл алиаса какраз в том, чтобы можно было включить StiOptions.Dictionary.ShowOnlyAliasForDatabase и спокойно переименовывать источник данных. А так, как было имя, так и осталось - никакой разницы с тем, что было без NotIdenticalNameAndAliasAtRegistrationOfNewData без использования алиасов.
Переименовать не выходит.
Edward писал(а):В Вашем случае достаточен вот этот код:
Попытался - получил InvalidCastException (Unable to cast object of type 'System.Collections.Generic.List`1[Stimulsoft.Report.Dictionary.StiDataSource]' to type 'System.Collections.ArrayList'.)
Убрал код "StiOptions.Dictionary.NotIdenticalNameAndAliasAtRegistrationOfNewData = true;" - все стало в норме :biggrin: Тестовый пример работает.
Посмотрим, что будет на рабочем проекте.

Спасибо!
Ответить