Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Репортинговые системы > CR источник данных - хранимая процедура


Автор: vlsaf 10.6.2008, 13:20
Всем привет.

Использую встроеный в студию кристал.
Источником данных является хранимая процедура (ХП) на SQL 2005 сервере.

Для получения данных от ХП мне нужно в нее передать значение ID.
Как это делается? 


В Dataset есть TableAdapter. Нужная таблица видна в "Database Fields", только она пустая.
Как и в каком месте ее можно заполнить данными?

Обычно я заполняю так: 
Код

myTableAdapter.Fill(myDataSet.myTable, ID);


Но как это должно происходить с Crystal Report - не знаю.

Автор: vlsaf 10.6.2008, 16:24
Разобрался. Настроил источник данных, как OLE DB (ADO),
выбрал мою хранимку, как источник данных и все путем.
Параметры подхватились автоматом.


Но есть еще вопрос. 
Где хранится строка подключения?

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

Никто не в курсе?
.........................

Нашел вот такое высказывание
программно изменяй ConnectionString у контрола он и подключает тебя к указанной в строке базе.
У какого контрола?

Автор: vlsaf 12.6.2008, 10:36
Да. Тут никакой активности не наблюдается. Жаль.

Код

using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
... 
private const string PARAMETER_FIELD_NAME = "@ID"; // имя параметра из отчета
...
#region ConnectionInfo
ConnectionInfo connectionInfo = new ConnectionInfo();
connectionInfo.ServerName = "SeverName";
connectionInfo.DatabaseName = "DatabaseName";
connectionInfo.IntegratedSecurity = false; // или true

if (!connectionInfo.IntegratedSecurity)
{
    connectionInfo.UserID = "sa";
    connectionInfo.Password = "123";
}

ReportDocument reportDocument = new ReportDocument();
string reportPath = Application.StartupPath + @"\..\..\PrintDocuments\myReport.rpt";
reportDocument.Load(reportPath);

SetDBLogonForReport(connectionInfo, reportDocument);
#endregion

private void SetDBLogonForReport(ConnectionInfo connectionInfo, ReportDocument reportDocument)
{
    Tables tables = reportDocument.Database.Tables;
    foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
    {
        TableLogOnInfo tableLogonInfo = table.LogOnInfo;
        tableLogonInfo.ConnectionInfo = connectionInfo;
        table.ApplyLogOnInfo(tableLogonInfo);
    }
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)