Как сгенерировать параметры для вызова хранимой процедуры?

Сталкивались ли вы с такой ситуацией, когда необходимо вызвать хранимую процедуру, скажем, с 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)

Currently rated 3.0 by 1 people

  • Currently 3/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , , ,

Comments

Add comment


 

biuquote
  • Comment
  • Preview
Loading