我有SQLCommand
个CommandText
对象,如下所示:
insert into [table] (field1, field2, field3)
select (value11, value12, value13),
select(value21, value22, value23),
select(value20001,value20002)(value20003)
我将所有这些值存储在此类对象的列表中。你可以认为它们是我和我一起的6000个变量(不是常数,但是是用户提供的)
如何在此中阻止SQL注入并使此查询参数化?
答案 0 :(得分:0)
您可以使用c#代码检查sql注入。
对于SQL SERVER 2008或更高版本
INSERT INTO TestTable (id, name) VALUES (1, 'test'), (2, 'test 2'), (3, 'test 2');
答案 1 :(得分:0)
SqlConnection con = new SqlConnection(yourconnectionString);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText= "insert into [table] (field1, field2, field3)
select (@Parameter1, @parameter2, @parameter3)";
cmd.Parameters.AddWithValue("@Parameter1", "your value of 1st parameter");
cmd.Parameters.AddWithValue("@Parameter2", "your value of 2nd parameter");
cmd.Parameters.AddWithValue("@Parameter3", "your value of 3rd parameter");
con.Open();
int TotalRowsAffected= cmd.ExecuteNonQuery();
con.Close();
如果你有多个插入,那么可以做这样的事情
for(int i=0; i<dt.Rows.Count; i++)
{
cmd.Parameters.AddWithValue("@Parameter1", dt.Rows[0][i]);
cmd.Parameters.AddWithValue("@Parameter2", dt.Rows[0][i]);
cmd.Parameters.AddWithValue("@Parameter3", dt.Rows[0][i]);
}