在C#中向数据库添加多个参数化变量

我想在这里做一些类似的事情:如何插入多行而不重复语句的“ INSERT INTO

dbo.Blah”部分?

除了除了要在一个查询中(快于几十个查询)执行此操作外,我还想将其参数化,因为输入来自网络。

目前我有

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();

}

这有点迟钝(请注意,实际示例中有更多的列,但这会使事情更加混乱)。

回答:

由于您正在使用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();

}

}

以上是 在C#中向数据库添加多个参数化变量 的全部内容, 来源链接: utcz.com/qa/424178.html

回到顶部