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

时间:2014-02-28 20:46:36

标签: c# sql .net

我正在尝试学习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”

1 个答案:

答案 0 :(得分:1)

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

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

这应该有用..

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

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

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