使用AddWithValue进行参数化查询将不起作用

问题描述:

我想了解SQL注入的概念以及如何防止它们。我明白参数化可以帮助解决这个问题。但是,将其应用于我的查询时,它似乎不起作用。这里是我的代码:使用AddWithValue进行参数化查询将不起作用

string query = "Select * from Database where ClientName = @ClientName"; 

using (SqlConnection sqlConn = new SqlConnection(connString)) 
      { 
       using (SqlCommand cmd = new SqlCommand(query, sqlConn)) 
       { 
        cmd.Parameters.Add("@ClientName", SqlDbType.VarChar).Value = ClientName; 
        sqlConn.Open(); 
        using (SqlDataReader myReader = cmd.ExecuteReader()) 
        { 
         dt.Load(myReader); 
        } 
       } 
      } 

我的查询中工作,如果我硬编码的客户名称,或者如果我在运行SQL查询明显。这似乎只是它不接受我的参数,它是从字面上搜索“@ClientName”

+0

“ClientName”列和“ClientName”变量的类型是什么? –

你不应该需要添加sqlDbType像你这样在这里..

cmd.Parameters.Add("@ClientName", SqlDbType.VarChar).Value = ClientName; 

这应该工作..

cmd.Parameters.Add("@ClientName", ClientName); 

即使那么,你想要AddWithValue而不是添加..所以这样。添加是这样做的老方法..我实际上从未在我的任何课程中使用它。

​​
+0

是的,你想使用AddWithValue而不是仅仅添加。每次我实际尝试使用“添加”时,intellisense都会告诉我它已经过时,我应该使用AddWithValue。 – Humpy

+0

嘿谢谢,这是正常工作。另外,我没有意识到这种方法也会为我们处理撇号。相当不错。 –