在c#中将多个参数化变量添加到数据库

时间:2015-08-12 12:27:27

标签: c# sql sql-server sql-server-2008

我想在这里做一些类似的事情:How do I insert multiple rows WITHOUT repeating the "INSERT INTO dbo.Blah" part of the statement? 除了在一个查询中执行此操作(更快,然后是几十个)之外,我还想在输入来自Web时进行参数化。

目前我有

foreach(string data in Scraper){
            SqlConnection conn = new SqlConnection(WebConfigurationManager.AppSettings["ConnectionInfo"].ToString());
            string query = "INSERT INTO DATABASE('web',@data)";
            SqlCommand sqlCommand= new SqlCommand(query, conn);
            sqlCommand.Parameters.AddWithValue("@data", data);
            Command.executeNonQuery(); 
            conn.close();
}

哪个有点笨拙(注意真实的例子有更多的colums但这会让事情更加混乱)。

2 个答案:

答案 0 :(得分:6)

由于您使用的是c#sql server 2008,因此可以使用表值参数将多行插入数据库。 以下是如何执行此操作的简短说明:

首先,您需要创建用户定义的表类型:

  
CREATE TYPE MyTableType AS TABLE
(
    Col1 int,
    Col2 varchar(20) 
)
GO

然后,您需要创建一个将此表类型作为参数

接受的存储过程   
CREATE PROCEDURE MyProcedure
(
    @MyTable dbo.MyTableType READONLY -- NOTE: table valued parameters must be Readonly!
)
AS

INSERT INTO MyTable (Col1, Col2)
SELECT Col1, Col2 
FROM @MyTable

GO

最后,从c#代码执行此存储过程:

   
DataTable dt = new DataTable();
dt.Columns.Add("Col1", typeof(int));
dt.Columns.Add("Col2", typeof(string));

// Fill your data table here

using (var con = new SqlConnection("ConnectionString"))
{
    using(var cmd = new SqlCommand("MyProcedure", con))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add("@MyTable", SqlDbType.Structured).Value = dt;
        con.Open();
        cmd.ExecuteNonQuery();
    }
}

答案 1 :(得分:2)

您可以使用SQL语法:

INSERT INTO YOUR_TABLE (dataColumn) VALUES (data1),(data2),(data3)

因此,您想要插入并追加",(datax)"查询并添加相应的参数。 也许它会有所帮助。