如何为表中的多行插入编写参数化查询?

时间:2015-03-11 16:50:01

标签: c# mysql sql .net bulkinsert

我有SQLCommandCommandText对象,如下所示:

 insert into [table] (field1, field2, field3) 
    select (value11, value12, value13), 
    select(value21, value22, value23),
    select(value20001,value20002)(value20003)

我将所有这些值存储在此类对象的列表中。你可以认为它们是我和我一起的6000个变量(不是常数,但是是用户提供的)

如何在此中阻止SQL注入并使此查询参数化?

2 个答案:

答案 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]);

}