Сталкивались ли вы с такой
ситуацией, когда необходимо вызвать хранимую процедуру, скажем, с 20-ю
параметрами? Вы наверняка использовали визуальный компонент студии, все-таки
заполнять такое количество параметров в ручную нудно и чревато ошибками. Но что
если таких процедур 100? В таком случае даже разместить визуальные SqlCommand будет трудно, не то,
что найти нужный элемент.
Но ведь MS SQL знает все названия параметров, полей, таблиц и вообще всего из чего состоит база
данных, так почему бы не генерировать, необходимые для вызова хранимой
процедуры, параметры непосредственно с помощью системных таблиц?
К статье прикреплён скрипт
для создания хранимой процедуры вызвав которую вы получите код на языке C#.
Например у меня есть хранимая процедура:
CREATE PROCEDURE
dbo.spGetMyInfo
(
@CategoryId AS INT,
@ManagerId AS INT,
@BusinessUnitId AS INT
)
AS
…
Для получения параметров для её вызова достаточно всего лишь выполнить в QueryAnalyzer следующую строку:
exec tools_CS_SPROC_Builder spGetMyInfo
В результате мы получим в окне сообщений следующий код:
#region SLQ Init
SqlCommand _sqlCmdspGetClientsInfoLight = _sqlConn.CreateCommand();
SqlDataReader drd = null;
_sqlCmdspGetClientsInfoLight .CommandText = "spGetClientsInfoLightt";
_sqlCmdspGetClientsInfoLight .CommandType = CommandType.StoredProcedure;
_sqlCmdspGetClientsInfoLight.Parameters.Add("@CategoryId", SqlDbType.Int, 4);
_sqlCmdspGetClientsInfoLight.Parameters["@CategoryId"].Value = ;
_sqlCmdspGetClientsInfoLight.Parameters.Add("@ManagerId", SqlDbType.Int, 4);
_sqlCmdspGetClientsInfoLight.Parameters["@ManagerId"].Value = ;
_sqlCmdspGetClientsInfoLight.Parameters.Add("@BusinessUnitId", SqlDbType.Int, 4);
_sqlCmdspGetClientsInfoLight.Parameters["@BusinessUnitId"].Value = ;
#endregion
#region
try
{
_sqlConn.Open();
drd = _sqlCmdspGetClientsInfoLight.ExecuteReader();
if (drd.HasRows)
{
while (drd.Read())
{
}
}
}
catch(Exception ex)
{
//Обработка исключений
}
finally
{
if (drd != null)
drd.Close();
_sqlConn.Close();
}
#endregion
в котором: первый регион отвечает за заполнение параметров объекта SqlCommand,
второй регион предназначен для обработки возвращаемых данных если они будут.
Вставив этот код там, где производится заполнение и вызов хранимой процедуры, мы получаем простой, наглядный и очень гибкий способ генерации параметров для хранимых процедур.
P.S. Лень двигатель прогресса.
tools_CS_SPROC_Builder.sql (10,52 kb)