Необходимо объявить скалярную переменную @

Я делаю простую операцию delete... В SQL Server Profiler показан этот сгенерированный запрос:

DELETE FROM OCRDecibel 
WHERE ConsumerLocation = @ConsumerLocation, Level = @Level,
MaxdbLevelObserved = @MaxdbLevelObserved, City = @City',
N'@ConsumerLocation nvarchar(40), @Level nvarchar(7), @MaxdbLevelObserved nvarchar(2), @City nvarchar(8)',
@ConsumerLocation = N'Walk near Majestic(Railway station area)',
@Level = N'Level 2', @MaxdbLevelObserved = N'84', @City = N'BANGLORE'

Выдает 2 ошибки:

Сообщение 137, уровень 15, состояние 2, строка 1
Необходимо объявить скалярную переменную "@ConsumerLocation".
Сообщение 105, уровень 15, состояние 1, строка 5
Незакрытые кавычки после строки символов '' .

Я просмотрел код... и запустил запрос на SQL. все та же проблема .. я не мог понять, где я пропал ..

Это мой код DAL:

private const string DEL_HW =
            @"DELETE FROM OCRDecibel WHERE ConsumerLocation=@ConsumerLocation,Level=@Level,MaxdbLevelObserved=@MaxdbLevelObserved,City=@City";

****************

 using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = DEL_HW;
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandTimeout = Configuration.TimeOutSeconds;
                    cmd.Parameters.AddWithValue("@ConsumerLocation", consumerLocation);
                    cmd.Parameters.AddWithValue("@Level", level);
                    cmd.Parameters.AddWithValue("@MaxdbLevelObserved", maxdbLevelObserved);
                    cmd.Parameters.AddWithValue("@City", city);

                    conn.Open();
                    cmd.ExecuteNonQuery();
                    cmd.Dispose();
                    conn.Close();
                }
            }
            return returnval;
        }

Любое предложение будет полезно...


person Neeraj Verma    schedule 23.06.2014    source источник


Ответы (1)


Вы, вероятно, захотите изменить свой SQL, чтобы использовать AND

Что-то типа

DELETE FROM OCRDecibel 
WHERE ConsumerLocation=@ConsumerLocation
AND Level=@Level
AND MaxdbLevelObserved=@MaxdbLevelObserved
AND City=@City

Кроме того, я думаю, что вызов cmd.Dispose();, поскольку вы используете блок using

person Adriaan Stander    schedule 23.06.2014
comment
Нет необходимости вызывать dispose, так как оператор using позаботится об этом. - person Eminem; 23.06.2014
comment
спасибо ..я понял это позже ...Мой запрос был неправильным ..спасибо - person Neeraj Verma; 23.06.2014