将表值参数传递给参数化 SQL 语句时出现“必须声明标量变量”错误

问题描述

在 C# 中,我试图将 DataTable 作为参数传递给 SQL 语句。我的代码如下:

protected virtual void DoDeleteRecords(List<Guid> ids)
{   
    if (ids.Count > 0)
    { 
        DataTable tvp = new DataTable();
        tvp.Columns.Add("Id",typeof(Guid));

        foreach (Guid id in ids)
        {
            DataRow row = tvp.NewRow();
            row["Id"] = id;

            tvp.Rows.Add(row);
        }

        string sql = string.Format("DELETE FROM MyTable WHERE ID IN ({0})","@IDTable");

        SqlConnection connection = new SqlConnection(CoreSettings.ConnectionString);

        using (connection)
        {
            SqlCommand command = new SqlCommand(sql,connection);
            SqlParameter tvpParam = command.Parameters.AddWithValue("@IDTable",tvp);
            tvpParam.SqlDbType = SqlDbType.Structured;
            tvpParam.TypeName = "dbo.IDList";

            connection.Open();

            command.ExecuteNonQuery();

            connection.Close();
        }
    }
}

但是,当调用 command.ExecuteNonQuery 时,我收到以下 SqlException 错误:

必须声明标量变量“@IDTable”

我知道这个错误通常与丢失参数值有关,但据我所知,我有。

谁能看出我做错了什么?

非常感谢。

更新我已经修改了问题以从我的示例中删除糟糕的 SQL 注入丰富的代码。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)