【问题标题】:Passing NULL Value to Stored Procedure Through C#通过 C# 将 NULL 值传递给存储过程
【发布时间】:2017-03-10 17:47:27
【问题描述】:

我的 MVC Web 应用程序中有一个更新类,用于从前端更新字段。这会调用数据库上的一个过程来更新表中的单元格。 (注意:该列可以接受 NULL 值)

如果我在我的 C# 代码中设置它,那么它会检查前端是否传递了 NULL 并将其替换为空字符串(空格也可以):

update.Value = dataModel.Value == null ? string.Empty : dataModel.Value;

但是,当我查询数据库表时,它没有在单元格中设置 NULL 值,而只是一个空白。如何通过 C# 代码将 NULL 值传递给过程?

【问题讨论】:

  • 您是否使用实体框架来更新您的数据库?
  • 我正在使用实体框架。
  • 然后只需设置 Update.Value = dataModel.Value; 让 EF 处理 null。它知道该怎么做
  • 收到错误:“错误详细信息:System.Data.SqlClient.SqlException (0x80131904):过程或函数 'InsertDataValue' 需要参数 '@Value',但未提供。”

标签: c# sql-server asp.net-mvc stored-procedures


【解决方案1】:

您可以使用DBNull.Value 在数据库中传递 Null 值。这是 DB 的 null 值的 .Net 替代品。

所以你的代码变成了

update.Value = dataModel.Value == null ? DBNull.Value : dataModel.Value;

https://msdn.microsoft.com/en-us/library/system.dbnull.value(v=vs.110).aspx

【讨论】:

  • 如果我使用它,我会收到错误:“无法确定条件表达式的类型,因为'System.DBNull'和'string'之间没有隐式转换”
  • 在这种情况下使用if else 而不是ternary operator
  • 我编码: if (dataModel.Value == null) { update.Value = DBNull.Value } else { update.Value = dataModel.Value; }。但是,现在收到错误“无法将类型 'System.DBNull' 隐式转换为 'string'”。类似的错误。
【解决方案2】:

试试这个command.Parameters.AddWithValue("@param", DBNull.Value);

【讨论】:

    猜你喜欢
    • 2011-02-13
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多