我在存储过程中有两个用户定义的数据表,用于插入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。
任何人都可以请让我知道如何处理空值,而发送到存储过程的用户定义的表。
2条答案
按热度按时间fruv7luv1#
不能将Null值作为表值参数传递。可以传递不带任何行的参数,然后在存储过程中检查行是否存在。
kpbpu0082#
避免****添加参数如果它为空。这样它将默认为空表。
我相信这一点在这里已经得到了回答:Binding empty list or null value to table valued parameter on a stored procedure (.NET)