0

我已尝试使用以下代码在 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#"/>
4

2 回答 2

0

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

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

像这样更正它:

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

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

于 2012-09-01T15:23:58.420 回答
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];

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

于 2012-09-01T18:01:37.013 回答