我在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#"/>
答案 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];
现在,你有三条线可以抛出异常并且你很容易发现罪魁祸首