【问题标题】:How to write a parameterized query for multiple row insert in a table?如何为表中的多行插入编写参数化查询?
【发布时间】:2015-05-13 14:17:17
【问题描述】:

我有一个带有CommandTextSQLCommand 对象,如下所示:

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

我将所有这些值存储在此类对象的列表中。您可以将它们视为我随身携带的 6000 个变量(不是常量,而是用户提供的)

如何防止 SQL 注入并让这个查询参数化?

【问题讨论】:

标签: c# mysql sql .net bulkinsert


【解决方案1】:

您可以使用 c# 代码检查 sql 注入。

适用于 SQL SERVER 2008 或更高版本

INSERT INTO TestTable (id, name) VALUES (1, 'test'), (2, 'test 2'), (3, 'test 2');

【讨论】:

    【解决方案2】:
    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]);
    
    }
    

    【讨论】:

    • 但是这里的参数会被覆盖......
    • @user2694330 为什么?这是没有意义的。一旦涉及到 Db,您的对象列表基本上就是一组行。它们会一遍又一遍地使用相同的参数集。
    猜你喜欢
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多