Бизнес-объект в качестве универсального источника

Обсуждение Stimulsoft Reports.NET
Aleksey
Сообщения: 2906
Зарегистрирован: 22 апр 2010, 06:57

Re: Бизнес-объект в качестве универсального источника

Сообщение Aleksey »

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

Данный .dll файл должен находиться в одной папке вместе с дизайнером. Либо подключен к вашему проекту.
Для подключения необходимо использовать следующий код:

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

StiConfig.Services.Add(new Stimulsoft.Report.Dictionary.StiDotConnectUniversalAdapterService());
StiConfig.Services.Add(new Stimulsoft.Report.Dictionary.StiDotConnectUniversalDatabase());
для задания строки подключения:

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

((StiDotConnectUniversalDatabase)report.Dictionary.Databases["Connection"]).ConnectionString = "connection string";
Спасибо.
Наталья
Сообщения: 110
Зарегистрирован: 19 фев 2009, 06:37

Re: Бизнес-объект в качестве универсального источника

Сообщение Наталья »

Здравствуйте.
Не удается подключить DotConnect к проекту.
Добавила в references

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

Stimulsoft.Report.dotConnectUniversal.dll
добавила

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

using Stimulsoft.Report.dotConnectUniversal;
Вот такая ошибка:

"Member can be static"
"Member must declare a body because it is not marked abstract or extern"

Подскажите, пожалуйста, в чем может быть дело?
Спасибо.
Aleksey
Сообщения: 2906
Зарегистрирован: 22 апр 2010, 06:57

Re: Бизнес-объект в качестве универсального источника

Сообщение Aleksey »

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

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

Спасибо.
Наталья
Сообщения: 110
Зарегистрирован: 19 фев 2009, 06:37

Re: Бизнес-объект в качестве универсального источника

Сообщение Наталья »

Здравствуйте.
Вопрос снят, ошибок при компиляции нет.
Но есть еще вопросы, позвольте задать.

Достаточно ли такой строки для создания отчета с универсальным источником данных?

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

_report.Dictionary.Databases.Clear();
_report.Dictionary.Databases.Add(new StiDotConnectUniversalDatabase("Connection", DataSource.GetConnectionString()));
И как его использовать дальше? В какой форме писать запрос на выборку данных в источнике данных? Есть какая-нибудь документация (в справках я нашла только описание как подключить источник данных).
И еще вопрос, мне нужно зарегистрировать

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

Stimulsoft.Report.DotConnectUniversal.dll
в GAC, при попытке это сделать возникает ошибка:

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

C:\Program Files\Microsoft Visual Studio 10.0\VC>gacutil -i D:\!_Repository\4.0\
release\Energomera\Cenergo\External\Stimulsoft.Report.DotConnectUniversal.dll
Microsoft (R) .NET Global Assembly Cache Utility.  Version 4.0.30319.1
Copyright (c) Microsoft Corporation.  All rights reserved.

Failure adding assembly to the cache: Attempt to install an assembly without a s
trong name
Можно ли исправить?
Спасибо.
Aleksey
Сообщения: 2906
Зарегистрирован: 22 апр 2010, 06:57

Re: Бизнес-объект в качестве универсального источника

Сообщение Aleksey »

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

Если вам необходимо добавить соединение из источники данных и кода, то вы можете использовать следующий код:

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

report.Dictionary.Databases.Clear();
report.Dictionary.Databases.Add(new StiDotConnectUniversalDatabase("Connection", newConnectionString));

StiStiDotConnectUniversalSource dataSource1 = new StiStiDotConnectUniversalSource("Connection", "DS1", "DS1", "SELECT * FROM Table1", true, false);
report.Dictionary.DataSources.Add(dataSource1);

//Add Columns:
foreach (DataColumn col in dataTableDataSource1.Columns)
{
     dataSource1.Columns.Add(col.ColumnName, col.DataType);
}
По поводу ошибки со strong name, пожалуйста, проверьте архим во вложении.

Спасибо.
Вложения
Stimulsoft.Report.DotConnectUniversal.zip
(16.71 КБ) 226 скачиваний
Наталья
Сообщения: 110
Зарегистрирован: 19 фев 2009, 06:37

Re: Бизнес-объект в качестве универсального источника

Сообщение Наталья »

По поводу ошибки со strong name, пожалуйста, проверьте архим во вложении.
Не удалось скомпилить из-за ошибок вот здесь:

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

        //public override void ApplyDatabaseInformation(StiDatabaseInformation information, StiReport report)
        {
            ApplyDatabaseInformation(information, report, null);
        }
и вот здесь:

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

        public override void ApplyDatabaseInformation(StiDatabaseInformation information, StiReport report, StiDatabaseInformation informationAll)
не воспринимал последний параметр

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

StiDatabaseInformation informationAll
После удаления этого кода, dll скомпилилась и удалось добавить в GAC, на сколько повлияла корректировка кода?
Aleksey
Сообщения: 2906
Зарегистрирован: 22 апр 2010, 06:57

Re: Бизнес-объект в качестве универсального источника

Сообщение Aleksey »

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

Данный код влиеят на добавление выбранных объектов из базы данных.
Пожалуйста, проверьте последний предрелизный билд. Для не последней версии продукта вы можете удалить следующий метод:

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

public override void ApplyDatabaseInformation(StiDatabaseInformation information, StiReport report)
{
    ApplyDatabaseInformation(information, report, null);
}
и изменить следующий:

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

public override void ApplyDatabaseInformation(StiDatabaseInformation information, StiReport report)
Спасибо.
Наталья
Сообщения: 110
Зарегистрирован: 19 фев 2009, 06:37

Re: Бизнес-объект в качестве универсального источника

Сообщение Наталья »

И еще вопрос. Допустим, я в своем модуле создала программно источник данных

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

report.Dictionary.Databases.Clear();
string newConnectionString = DataSource.GetConnectionString(); //получается строка в виде "DataSource = D:\\CC.DB.SQLite.db"
report.Dictionary.Databases.Add(new StiDotConnectUniversalDatabase("Connection", newConnectionString));

StiStiDotConnectUniversalSource dataSource1 = new StiStiDotConnectUniversalSource("Connection", "DS1", "DS1", "SELECT * FROM Table1", true, false);
report.Dictionary.DataSources.Add(dataSource1);
report.Save("D:\\mrt.mrt");
report.Design();
1. При запуске модуля в

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

StiDotConnectUniversalAdapterService
возникает ошибка "Provider not specified" в строке

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

UniConnection sqlConnection = new UniConnection(database.ConnectionString);
. Какую строку подключения нужно передавать?
2. Можно ли открыть созданный таким образом отчет и в качестве

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

"SELECT * FROM Table1"
использовать не чисто sql запрос, а, например, хранимую процедуру, записанную так, чтобы потом отчет работал для разных источников данных (MySql, Oracle,SQLite,PostgreSql), и если да, то каков будет синтаксис записи?
3.

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

_dataContext = (ceDataContext)DataSource.GetDataContext();
- так можно получить ORM источник данных, содержащий таблицы. Как можно этот _dataContext передать в отчет, чтобы в отчете отобразился весь список таблиц этого _dataContext, и в качестве подключения передать newConnectionString = DataSource.GetConnectionString(); ?
4. Вы можете что-нибудь сказать на счет Devart LinqConnect?
Aleksey
Сообщения: 2906
Зарегистрирован: 22 апр 2010, 06:57

Re: Бизнес-объект в качестве универсального источника

Сообщение Aleksey »

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

1. В строке соединения для dotConnect Universal должен быть указан тип провайдера
к примеру для MySQL соединения:

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

"provider=MySQL;DataSource = D:\CC.DB.SQLite.db"
2. Для хранимой процедуры синтаксис будет следующим:

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

"execute ProcedureName"
3. Как вариант, вы можете попробовать использовать следующий код:

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

report.RegBusinessObject("Data", _dataContext );
report.Dictionary.SynchronizeBusinessObjects(int levels);
4. Ксожалению, но данный компонент не получится использовать, напрямую, в самом дизайнере.

Спасибо.
Наталья
Сообщения: 110
Зарегистрирован: 19 фев 2009, 06:37

Re: Бизнес-объект в качестве универсального источника

Сообщение Наталья »

Добрый день.
1.Ну вот пытаюсь сфомировать строку подключения и передать dotConnect Universal:

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

string connect = "provider = " + DataSource.GetProviderPrefix() + ";" + _dataContext.Connection.DataSource;
_report.Dictionary.Databases.Add(new StiDotConnectUniversalDatabase("Connection", connect));
Затем открываю отчет в дизайнере, в качестве строки соединения пришла строка:

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

provider = SQLite; d:\cC.DB.SQLite.db
Нажимаю кнопку Проверка, возникает ошибка:

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

Connection error: Connection parameter '' is duplicate
,ставлю кавычки - ошибка: "не задан provider".
Подскажите, пожалуйста, в чем может быть дело?

2. На счет процедуры для dotConnect Universal, если процедура будет написана,например, на PL SQL, и использована в отчете с подключением dotConnect Universal, то такой отчет будет работать на компьютере,например, с MySQL? Необходимо, чтобы и синтаксис процедуры, как и sql - запроса, был не привязан к БД.
Может быть, я что-то не совсем понимаю.
3. Вот этот код:

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

report.RegBusinessObject("Data", _dataContext );
не помог вывести в отчете в dataSourse список всех таблиц источника данных.
Если вместо _dataContext записать _dataContext.Abonent - одна из таблиц источника данных - в dataSourse отображаются поля данной таблицы.
Можно ли отобразить все таблицы?
Таблица Abonent вида:

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

public Devart.Data.Linq.Table<Abonent> Abonents
        {
            get
            {
                return this.GetTable<Abonent>();
            }
        }
Спасибо.
Ответить