Передача переменных C # в параметр SQL

Я пытаюсь передать переменную, которую я собираю на C #, в параметр в SQL. Я пробовал несколько разных способов, которые видел в Интернете, чтобы попытаться передать его, но ни один из них не сработал. Мои C # и SQL ниже.

C#:

using (SqlConnection conn = new SqlConnection(connection here)) {
    string getCell = GridView.GetFocusedRowCellDisplayText(IDColumn);
    int ID = int.Parse(getCell)
    string spName = "spNameHere"
    SqlCommand comm = SqlCommand(spName, conn);
    comm.Parameters.Add("@ID", SqlDbType.Int);
    comm.Parameters["@ID"].Value = ID;
    conn.Open();
    comm.ExecuteNonQuery();
    conn.Close();
}

SQL:

Create Procedure [dbo].[spName]
    @ID int
As
Begin
    Set NOCOUNT ON;
    SET @ID = @ID;
    IF EXISTS (SELECT 1 FROM table1 WHERE column = @ID)… (irrelevant code here that the parameter doesn’t apply to here)
    FROM table1 WHERE column = @ID;...
END

Я получаю ошибку

System.Data.SqlClient.SqlException 'Процедура или функция ожидают параметр, который не был предоставлен'


person neoneclectica    schedule 08.07.2021    source источник
comment
Что не сработало? Вы не получили ожидаемое значение переменной? Вы отлаживали, чтобы убедиться, что значение заполнено, прежде чем даже вызывать SP?   -  person Brad    schedule 08.07.2021
comment
Ваш SP не выглядит действительным, вы устанавливаете @ID = @ID ?? Зачем?   -  person Brad    schedule 08.07.2021
comment
@Brad выдает ошибку, говоря, что переменная не была передана, и если проблема в том, что она не заполняется перед вызовом SP, я не знаю, как это сделать, несмотря на то, что я без разницы следил за различными учебными пособиями в Интернете.   -  person neoneclectica    schedule 08.07.2021
comment
@Brad пытается присвоить ему переменную. Я был раздражен, пытаясь заставить его работать, и это последнее, что я пытался сделать, чтобы установить переменную в параметр.   -  person neoneclectica    schedule 08.07.2021
comment
Если вы не уверены, взято ли значение из кода C #, попробуйте отладить (добавить точку останова). Или, если вы не уверены, попробуйте записать значение в консоль или всплывающее окно сообщения (в зависимости от того, что / как ваш код изменит то, что вы делаете).   -  person Brad    schedule 08.07.2021
comment
Но похоже, что проблема не в коде C #, а не в части SP.   -  person Brad    schedule 08.07.2021
comment
Если вы получаете сообщение об ошибке, обновите свой вопрос, включив в него точное сообщение об ошибке, которое вы получаете.   -  person Daniel Mann    schedule 08.07.2021
comment
попробуйте добавить comm.CommandType = CommandType.StoredProcedure   -  person D Stanley    schedule 08.07.2021
comment
@DanielMann добавил ошибку   -  person neoneclectica    schedule 08.07.2021
comment
@DStanley Почему вы удалили свой ответ, почти наверняка проблема здесь   -  person Charlieface    schedule 08.07.2021
comment
SET @ID = @ID; интересно, для чего это? Знаете ли вы, что параметры можно сократить до comm.Parameters.Add("@ID", SqlDbType.Int).Value = ID;   -  person Charlieface    schedule 08.07.2021
comment
Я сомневался в себе после того, как нашел другие вопросы, в которых утверждается, что установка типа команды не всегда необходима. Поэтому я сделал это предложение :) Если это окажется правильным решением, я восстановлю удаление.   -  person D Stanley    schedule 08.07.2021
comment
@DStanley, это было правильное решение!   -  person neoneclectica    schedule 09.07.2021


Ответы (1)


Поскольку вы выполняете хранимую процедуру, вам нужно добавить

comm.CommandType = CommandType.StoredProcedure;

перед его выполнением.

person D Stanley    schedule 08.07.2021