gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:24:55 26 4
gpt4 key购买 nike

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

目前我有

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# - 在c#中将多个参数化变量添加到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31965233/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com