Thi*_*ser 2 c# sql sql-server sql-server-2008
我想在这里做一些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();
}
Run Code Online (Sandbox Code Playgroud)
这有点笨拙(注意真实的例子有更多的colums但这会让事情更加混乱).
由于您使用c#和sql server 2008,您可以使用表值参数插入多行到您的数据库.以下是有关如何执行此操作的简短说明:
首先,您需要创建用户定义的表类型:
CREATE TYPE MyTableType AS TABLE
(
Col1 int,
Col2 varchar(20)
)
GO
Run Code Online (Sandbox Code Playgroud)
然后,您需要创建一个将此表类型作为参数接受的存储过程
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
Run Code Online (Sandbox Code Playgroud)
最后,从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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
454 次 |
| 最近记录: |