我正在尝试学习SQL注入的概念以及如何防止它们。我知道参数化可以帮助解决这个问题。但是,当将它应用于我的查询时,它似乎不起作用。这是我的代码:
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 :(得分:1)
你不需要像在这里那样添加sqlDbType ..
cmd.Parameters.Add("@ClientName", SqlDbType.VarChar).Value = ClientName;
这应该有用..
cmd.Parameters.Add("@ClientName", ClientName);
即使这样,你想要AddWithValue而不是添加..就像这样。 Add是这样做的老方法..我实际上从未在我的任何课程中使用过它。
cmd.Parameters.AddWithValue("@ClientName", ClientName);