使用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”
你不应该需要添加sqlDbType像你这样在这里..
cmd.Parameters.Add("@ClientName", SqlDbType.VarChar).Value = ClientName;
这应该工作..
cmd.Parameters.Add("@ClientName", ClientName);
即使那么,你想要AddWithValue而不是添加..所以这样。添加是这样做的老方法..我实际上从未在我的任何课程中使用它。
是的,你想使用AddWithValue而不是仅仅添加。每次我实际尝试使用“添加”时,intellisense都会告诉我它已经过时,我应该使用AddWithValue。 – Humpy
嘿谢谢,这是正常工作。另外,我没有意识到这种方法也会为我们处理撇号。相当不错。 –
“ClientName”列和“ClientName”变量的类型是什么? –