C # Запустить процедуру без указания имени параметра - PullRequest
7 голосов
/ 03 марта 2011

Как я могу выполнить хранимую процедуру, которая принимает параметры без указания имени параметра? Имя параметра в хранимой процедуре может измениться с CustomerID на CustID, поэтому я не хочу постоянно менять свой код.

Вместо того, чтобы делать то, что указано ниже, где вы указываете имя параметра -

command.Parameters.Add("@dtStart", SqlDbType.DateTime);
command.Parameters["@dtStart"].Value = startDate;
command.Parameters.Add("@CustomerID", SqlDbType.NChar);
command.Parameters["@CustomerID"].Value = customerID;

Я хочу сделать что-то вроде этого -

command.Parameters.Add(startDate, customerID);

Ответы [ 6 ]

16 голосов
/ 03 марта 2011

Имя параметра в хранимой процедуре может измениться с CustomerID на CustID

Пощечина тому, кто это делает.

Имена параметров - ваш надежный способидентифицируя параметр.Другой вариант - последовательность, кажется намного более нестабильной.

5 голосов
/ 03 марта 2011

Я не думаю, что вы можете создать SqlParameter объект без указания его имени.Однако вы должны иметь возможность использовать метод DeriveParameters ( см. MSDN ) для получения набора параметров с именами, автоматически полученными с сервера SQL.

Вы можете найти пример здесь .Это выглядит примерно так:

SqlCommand command = // create a command for calling the stored procedure
SqlCommandBuilder.DeriveParameters(command);

// Now you can set values of parameters in a loop
for(int i = 0; i < command.Parameters.Length; i++) {
  var parameter = command.Parameters[i]
  // Set value of ith parameter
}
1 голос
/ 02 августа 2016

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

var par = cmd.CreateParameter();
par.Value = myValue;
cmd.Parameters.Add(par); // this will change the name to "ParameterX"
par.ParameterName = null;
0 голосов
/ 03 марта 2011

Использование параметров Безымянный возможно только с OdbcCommand и OleDbCommand объектными параметрами.

0 голосов
/ 03 марта 2011

Использование обнаружения параметров, прокрутите вниз: http://msdn.microsoft.com/en-us/library/ff664692(PandP.50).aspx

0 голосов
/ 03 марта 2011

Вы можете использовать SQL exec, который не запрашивает имена параметров:

command.CommandText = string.Format(
    "exec dbo.YourProcedure {0}, '{1}'",
    intParameter,
    stringParameter.Replace("'","''")
);
command.ExecuteNonQuery();

Если ваш источник параметров ненадежен, обязательно избегайте одинарных кавычек в строковых параметрах. Это сделано для stringParameter во фрагменте выше.

...