必须声明标量变量" @"

时间:2014-06-23 04:29:36

标签: sql data-access-layer profiler

我正在进行简单的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个错误:

  

Msg 137,Level 15,State 2,Line 1
  必须声明标量变量" @ ConsumerLocation"。
  Msg 105,Level 15,State 1,Line 5
  字符串后面的未闭合引号&#39; <#39;。

我已经完成了代码..并在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;
        }

任何建议都会有帮助......

1 个答案:

答案 0 :(得分:3)

您可能希望将SQL更改为使用AND

这样的东西
DELETE FROM OCRDecibel 
WHERE ConsumerLocation=@ConsumerLocation
AND Level=@Level
AND MaxdbLevelObserved=@MaxdbLevelObserved
AND City=@City

另外,我认为当您使用cmd.Dispose();块时调用using