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

我想在这里做一些simulair: 如何在不重复声明的“INSERT INTO dbo.Blah”部分的情况下插入多行? 除了在一个查询中执行此操作(快于几十个)之外,我还想在输入来自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但这会让事情更加混乱)。

由于您使用的是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(); } } 

您可以使用SQL语法:

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

因此,循环遍历要插入的行,并将“,(datax)”附加到查询中,并添加相应的参数。 也许它有所帮助。