C# 存储SELECT语句中的多个值,然后插入到不同的表中
我想使用C# 存储SELECT语句中的多个值,然后插入到不同的表中,c#,sql,asp.net,stored-procedures,C#,Sql,Asp.net,Stored Procedures,我想使用SELECT语句根据列表框中的多个值将多个ID放入一个表中,然后运行INSERT语句并将多个ID存储到INSERT语句的不同表中 我下面的代码不起作用,因为我在单行中得到“NULL”,而不是在多行中得到多个id 我对所有SQL语句使用存储过程 请参阅下面我的代码: 我的ASPX网页的隐藏代码: string listboxvalue = ""; foreach (ListItem item in listbox.Items) { if (item.Selected) {
SELECT
语句根据列表框中的多个值将多个ID放入一个表中,然后运行INSERT
语句并将多个ID存储到INSERT
语句的不同表中
我下面的代码不起作用,因为我在单行中得到“NULL”,而不是在多行中得到多个id
我对所有SQL语句使用存储过程
请参阅下面我的代码:
我的ASPX网页的隐藏代码:
string listboxvalue = "";
foreach (ListItem item in listbox.Items)
{
if (item.Selected)
{
listboxvalue += item.Text + ',';
}
}
listboxvalue = listboxvalue.Substring(0, listboxvalue.Length - 1);
cmd.Parameters.AddWithValue("spselectvalue", listboxvalue);
存储过程:
@spselectvalue nvarchar(MAX),
// Select multiple Ids based on multiple items from list box
DECLARE @Dis TABLE (DisID int)
INSERT INTO @Dis
SELECT DId
FROM [table name]
WHERE [COLUMN] IN ('+@spselectvalue +')
EXEC sp_executesql @Dis
// Insert multiple Ids (from above select statement) into different table
INSERT INTO [dbo].[DifferentTable] ([SelectedIds])
VALUES
(
(SELECT DisID from @Dis)
)
这似乎不是一个有效(或逻辑)的SQL。
exec sp\u executesql@Dis
不应该在那里,或者@Dis
不应该是表
使用sp_executesql
时,参数应为包含要执行的语句()的字符串
可以找到详细的答案
另外:
INSERT-INTO@Dis…
行以这种方式编写时不会像您预期的那样工作,原因在链接问题中提到过(以及这里提到的Erland Sommarskog博客)。您的问题似乎是您不知道如何将ID列表放入存储过程中进行处理。希望这个例子能有所帮助。如果这样做,就不必处理逗号分隔的字符串或动态SQL
首先,定义可以包含ID列表的SQL类型:
CREATE TYPE dbo.MyList
AS TABLE
(
ID VarChar(50)
);
然后,编写一个接受此类型作为其输入参数的存储过程:
CREATE PROCEDURE dbo.InsertAList
@List AS dbo.MyList READONLY
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [dbo].[DifferentTable]
SELECT ID FROM @List
END
现在将数据从c#end绑定到存储过程。要绑定它,必须首先将数据存储在数据表中,这相对简单:
var table = new DataTable();
table.Columns.Add("ID", typeof(string));
foreach (ListItem item in listBox.Items.Where(i => i.Selected))
{
table.Rows.Add(item.Text);
}
然后将表提交到存储过程,如下所示:
var cmd = new SqlCommand()
{
CommandType = CommandType.StoredProcedure,
CommandText = "InsertAList",
Connection = myConnection
};
cmd.Parameters.Add(new SqlParameter("@List", SqlDbType.Structured)
{
TypeName = "dbo.MyList",
Value = table
});
cmd.ExecuteNonQuery();
所选值被视为数字
DECLARE @Sqltext nvarchar(max) =
'INSERT INTO [dbo].[DifferentTable] ([SelectedIds])
SELECT DId
FROM [table name]
WHERE [COLUMN] IN (' + @spselectvalue + ')'
EXEC sp_executesql @Sqltext
@Dis是否包含您期望的数据?