Страница 1 из 1

Источник данных - хранимая процедура

Добавлено: 10 окт 2008, 09:22
hornet
Как в runtime сделать хранимую процедуру источником данных? И передать в неё входные параметры.
База данных не типизирована, СУБД MSSQL SERVER2005. Желательно пример на C#. Спасибо

Источник данных - хранимая процедура

Добавлено: 10 окт 2008, 21:44
Edward
Здравствуйте.

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

StiReport report = new StiReport();
StiSqlDatabase db = new StiSqlDatabase("MyConnection", @"Password=;Persist Security Info=False;Data Source=.\SqlExpress;Integrated Security=False;Initial Catalog=NORTHWIND;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.Connect(false);
mySource.SynchronizeColumns();
mySource.Parameters.Add(new StiDataParameter("@CustID", "\"ALFKI\"", (int)SqlDbType.VarChar , 5));
mySource.SqlCommand = "exec CustOrderHist @CustID";
// Можно посмотреть, что получилось
report.Design();

//Присвоение параметров для шаблона отчета
//report.Dictionary.DataSources["MySource"].Parameters["@CustID"].ParameterValue = "ALFKI";
//report.Compile();

//Присвоение параметров для скомпилированного отчета:
report.Compile();
report.CompiledReport.Dictionary.DataSources["MySource"].Parameters["@CustID"].ParameterValue = "ALFKI";


report.Show();
Спасибо.

Источник данных - хранимая процедура

Добавлено: 13 окт 2008, 06:48
hornet
Здраствуйте,
Спасибо за ответ, потихоньку разобрался.. Только теперь такая проблема: пытаюсь присвоить параметры в runtime, как вы подсказали:
mySource.Parameters.Add(new StiDataParameter("@CustID","\"ALFKI\"",(int)SqlDbType.VarChar,5));
mySource.SqlCommand = "exec CustOrderHist @CustID";
Report.Dictionary.DataSources["mySource"].Parameters["@CustID"].ParameterValue = "ANATR";
MessageBox.Show(mySource.Parameters["@CustID"].ParameterValue.ToString());
Report.Design();
Report.Compile();
// MessageBox Показывает , что значение парамета @CustID = ANATR
//Смотрю в дизайнере отчёта значение параметра @CustID = "ALFKI"

Почему не меняется.. незнаю..
Заранее спасибо за ответ.....

Источник данных - хранимая процедура

Добавлено: 13 окт 2008, 07:52
hornet
Сам разобрался... Написал
Report.Dictionary.DataSources["mySource"].Parameters["@CustID"].Value = "\"ANATR\"";
вместо
Report.Dictionary.DataSources["mySource"].Parameters["@CustID"].ParametrValue = "\"ANATR\"";
Всё заработало.....

Источник данных - хранимая процедура

Добавлено: 13 окт 2008, 13:42
Edward
Да, действительно, в коде была ошибка в строке присвоения параметров:

Вот 2 варианта, которые работают:

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

//Присвоение параметров в шаблоне отчета до компиляции:
report.Dictionary.DataSources["MySource"].Parameters["@CustID"].ParameterValue = "ALFKI";
report.Compile();
report.Show();
А если присваивать параметры в скомпилированном отчете, то код должен выглядеть следующим образом:

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

report.Compile();
report.CompiledReport.Dictionary.DataSources["MySource"].Parameters["@CustID"].ParameterValue = "ALFKI";
report.Show();
Разница между ParameterValue и Value только в том, что свойство Value имеет тип string, ParameterValue - object.

Извините за ошибку.

Спасибо.