SQL Server 从C#向用户定义的数据表发送空值

mdfafbf1  于 2023-01-20  发布在  C#
关注(0)|答案(2)|浏览(135)

我在存储过程中有两个用户定义的数据表,用于插入projectid和AccountId的列表。
我从C#发送值列表,但一次只能发送一个列表,另一个为空。
示例:处理项目ID详细信息时,项目ID的列表将在帐户ID的列表为空时消失。
与处理帐户ID详细信息相同,当项目ID的列表为空时,帐户ID的列表将消失。

public string SubmitGroupInfo(GroupSettingsInputs finalinput)
{
    string result = string.empty;

    List<ProjectIDinputList> ProjectIdDetails = new List<ProjectIDinputList>(finalinput.ProjectIds); 

    // Here I am getting finalinput.ProjectIds is null.
    List<AccountIDinputList> AccountIdDetails = new List<AccountIDinputList>(finalinput.AccountIds);

    DataTable projectlist = ToDataTable(ProjectIdDetails);
    DataTable accountlist = ToDataTable(AccountIdDetails);

    dbcmd = this.sqlConn.GetStoredProcCommand("SPName");
    dbcmd.CommandType = CommandType.StoredProcedure;
    dbcmd.CommandTimeout = 240;

    this.sqlConn.AddParameter(dbcmd,"@ProjectIds",SqlDbType.Structured,projectlist);
    this.sqlConn.AddParameter(dbcmd,"@AccountIds",SqlDbType.Structured,accountlist);

    using (IDataReader datareader = this.sqlConn.ExecuteReader(dbcmd))
    {
        while (datareader.Read())
        {
            result = Convert.ToString(datareader["result"]);
        }
    }

    return result;
}

这段代码我只添加了示例一。
最后,从参数“@ProjectIds”获取DbNull值不受支持。表值参数不能为DBNull。
任何人都可以请让我知道如何处理空值,而发送到存储过程的用户定义的表。

fruv7luv

fruv7luv1#

不能将Null值作为表值参数传递。可以传递不带任何行的参数,然后在存储过程中检查行是否存在。

kpbpu008

kpbpu0082#

避免****添加参数如果它为空。这样它将默认为空表。

我相信这一点在这里已经得到了回答:Binding empty list or null value to table valued parameter on a stored procedure (.NET)

相关问题