Asp.net 存储过程导致对象引用异常
我在windows编程中尝试了以下登录检查代码 My.cs文件的代码是: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
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应用程序)使用。