【问题标题】:Exception: Object reference not set to an instance of an object例外:对象引用未设置为对象的实例
【发布时间】:2011-03-09 11:36:06
【问题描述】:

我一直在使用代码,

  object amountObject = MySqlDAL.ExecuteQuerySingle(query);

        if (amountObject.Equals(System.DBNull.Value))
        {
            return amount;
        }

这里有时会出现异常“对象引用未设置为对象的实例”。来自句子 amountObject.Equals(System.DBNull.Value)。它适用于某些数据集。

可能是什么原因?谁能帮帮我?

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    尝试检查结果是否为 null..

    if (amountObject ==null || amountObject.Equals(System.DBNull.Value))          
    {             
         return amount;         
    } 
    

    【讨论】:

    • 我自己认为这不是一个好主意。它会起作用,但 ExecuteQuerySingle 应该有 一个 记录的返回空结果的方式......并且一种方式是客户端代码应该检查的方式。
    • @Jon 同意,最好看看 ExecuteQuerySingle 内部并从源头解决问题。
    • 好的。谢谢(你的)信息。让我检查一下。
    【解决方案2】:

    大概MySqlDAL.ExecuteQuerySingle 正在返回null 而不是System.DBNull.Value。很难知道这是您的期望还是 ExecuteQuerySingle 中的错误。

    【讨论】:

    • 是的,乔恩先生,它返回空值。所以不能这样检查吗?和 System.DBNull.Value 一样吗?
    • @Anjana: 不,DBNull.Value 是一个非空引用表示来自数据库的空结果,但它与空引用不同。您需要确定该方法是返回空引用还是DBNull.Value,并采取相应措施。
    • 乔恩先生。现在它的工作,因为我将检查标准更改为 ok if (amountObject ==null || amountObject.Equals(System.DBNull.Value)) { return amount; } 感谢您的信息
    • @Anjana:虽然这可行,但您不应该这样做。找出返回的意味着的含义,然后仅对其进行测试。
    • @Jon 先生实际上同一段代码已用于两种不同的场景。
    【解决方案3】:

    有时查询不返回值,因此amountObject 为空。

    使用导致此失败的参数手动运行查询,您的 SQL 有问题。

    【讨论】:

    • 是的。问题在于检查标准。现在它工作了。
    【解决方案4】:

    只是改变:
    if (amountObject.Equals(System.DBNull.Value)) { 退货金额; }

    到:
    if (amountObject != null && amountObject.Equals(System.DBNull.Value)) { 退货金额; }

    【讨论】:

      【解决方案5】:

      您是否检查过 amountObject 是否为空?看来MySqlDAL.ExecuteQuerySingle返回的值是NULL。

      【讨论】:

      • Yes Mr Falcon 它返回空值。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      • 2013-10-28
      相关资源
      最近更新 更多