存储过程导致对象引用异常

时间:2012-09-01 15:14:16

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

我在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#"/>

2 个答案:

答案 0 :(得分:0)

最有可能原因是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;
}

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

答案 1 :(得分:0)

如果我是你,我会避免像你一样链接你的代码,这将很难调试,因为几个对象可能会在该行上抛出异常,你将无法找到哪一个

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];

现在,你有三条线可以抛出异常并且你很容易发现罪魁祸首