Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 存储SELECT语句中的多个值,然后插入到不同的表中_C#_Sql_Asp.net_Stored Procedures - Fatal编程技术网

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是否包含您期望的数据?