我知道,非参数化查询因SQL注入而被忽视。那么,我的应用程序中有很多查询容易受到SQL注入的影响。我似乎无法用SqlDataReader
来包裹我的头。我可以用ExecuteNonQuery
而不是SQLDataReader
。使用SQL数据读取器进行参数化查询C#
有人可以给我一些指点和或要做到这一点的最佳方式的例子,执行查询时,返回正是它应该,我只是想使它尽可能的安全....
代码:
string myQuery = "Select [shoeSize] AS 'Shoe Size', [shoeBrand] AS 'Shoe Brand' FROM [myTable] "
+ "WHERE [customerName] = '" + customer + "' AND " + "[customerPin] = '" + customerID + "'";
sqlCmd = new SqlCommand(myQuery, conn);
sqlCmd.Connection.Open();
SqlDataReader rdr2 = sqlCmd.ExecuteReader();
if (rdr2.HasRows)
{
rdr2.Read();
shoeSize= rdr2["Shoe Size"].ToString();
shoeBrand= rdr2["Shoe Brand"].ToString();
}
conn.close();
如果您调用ExecuteReader()或ExecuteNonQuery(),则无关紧要。这是一样的,所以如果你知道如何做到这一点,你可以与其他人做。参考:[在SQL语句中使用参数](http://stackoverflow.com/questions/7505808/using-parameters-in-sql-statements) –
您不应该使用字符串连接或字符串格式来生成sql查询文本,而是使用sqlCmd.Parameters.Add(...) – Oleg
*皱眉*是今年的委婉说法...... –