【问题标题】:Stored Proceedure results in Object Reference Exception存储过程导致对象引用异常
【发布时间】:2012-09-02 02:01:37
【问题描述】:

我已经尝试了以下代码在 windows 编程中进行登录检查。

我的 .cs 文件的代码是:

 public DataTable logincheck(String UserName, String Password)
    {
        object[] param = new object[2];
        param[0] = UserName;
        param[1] = Password;
        return SqlHelper.ExecuteDataset(ConfigurationManager.ConnectionStrings["cn"].ConnectionString, "proc_LoginChec", param).Tables[0];
    }

我在返回行收到对象 null 错误,错误是

"对象引用未设置为对象的实例。

我不知道为什么会这样。请帮助我。

我的 App.config 文件是:

<add name="cn" providerName="System.Data.SqlClient" connectionString="Data Source=.; Intial Catalog=dbRam; User id=sa; Password=xyz123#"/>

【问题讨论】:

  • 检查我的答案。对返回的 DataSet 进行空检查应该可以完成这项工作。
  • @nunespascal 我试过你的代码,但仍然抛出同样的错误

标签: asp.net sql-server stored-procedures login


【解决方案1】:

如果我是你,我会避免像你一样链接你的代码,这将很难调试,因为多个对象可能会在该行引发异常,而你将无法确定是哪一个

return SqlHelper.ExecuteDataset(ConfigurationManager.ConnectionStrings["cn"].ConnectionString, "proc_LoginChec", param).Tables[0];

可以改写

string connString = ConfigurationManager.ConnectionStrings["cn"].ConnectionString;
DataSet ds = SqlHelper.ExecuteDataset(connString, "proc_LoginChec", param);
return ds.Tables[0];

现在,您可以从三行中抛出异常,您将很容易发现罪魁祸首

【讨论】:

    【解决方案2】:

    最可能的原因是ExecuteDataset 在找不到记录时返回 null。

    在访问 Tables[0] 之前,您没有对返回的 DataSet 进行空检查。

    这样改正:

    public DataTable logincheck(String UserName, String Password)
    {    
        DataTable dt = null;
        var ds = SqlHelper.ExecuteDataset(
                       ConfigurationManager.ConnectionStrings["cn"].ConnectionString,             
                       "proc_LoginChec",   
                       param);
        if(null != ds && ds.Tables.Count > 0)
          dt = ds.Tables[0];
        return dt;
    }
    

    注意:您稍后也需要进行空值检查,因为如果未找到数据,此函数将返回空值。

    【讨论】:

    • 你检查你的 web.config 了吗?确保设置了连接字符串cn?如果这是一台开发机器,您可以在调试模式下验证这一点。
    • Asp.net 项目默认需要 web.config 文件。 App.config 主要由程序集(winforms 或控制台应用程序)使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-24
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多