Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 存储过程导致对象引用异常_Asp.net_Sql Server_Stored Procedures_Login - Fatal编程技术网

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

Asp.net 存储过程导致对象引用异常,asp.net,sql-server,stored-procedures,login,Asp.net,Sql Server,Stored Procedures,Login,我在windows编程中尝试了以下登录检查代码 My.cs文件的代码是: public DataTable logincheck(String UserName, String Password) { object[] param = new object[2]; param[0] = UserName; param[1] = Password; return SqlHelper.ExecuteDataset(Config

我在windows编程中尝试了以下登录检查代码

My.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#"/>

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

在访问表[0]之前,对返回的
数据集
没有空检查

请这样更正:

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检查,因为如果找不到数据,此函数将返回null。

如果我是您,我将避免像您那样链接代码,这将很难调试,因为多个对象可能会在该行抛出异常,而您将无法指出哪一个异常

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

现在,您有三行代码可以抛出异常,您可以很容易地找到罪魁祸首

检查我的答案。对返回的数据集进行空检查应该可以完成这项工作。@nunespascal我已经尝试了您的代码,但仍然抛出相同的错误您是否检查了web.config?以确保设置了连接字符串
cn
如果这是一台开发计算机,则处于调试模式。Asp.net项目默认情况下需要一个web.config文件。App.config主要由程序集(winforms或console应用程序)使用。