2012-09-01 31 views
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]; 
    } 

我收到的對象空錯誤返回行的錯誤

對象引用不設置到對象的實例

我不知道爲什麼會這樣..請幫我

我App.config文件爲:

<add name="cn" providerName="System.Data.SqlClient" connectionString="Data Source=.; Intial Catalog=dbRam; User id=sa; Password=xyz123#"/> 
+0

你是什麼意思????? ? –

+0

檢查我的答案。對返回的DataSet進行空檢查應該可以完成這項工作。 – nunespascal

+0

@nunespascal我試過你的代碼,但仍然拋出相同的錯誤 –

回答

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

現在,你有三條線從該異常可能拋出,你會很容易地發現罪魁禍首

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檢查後也因爲如果沒有數據發現這個函數返回一個空值。

+0

我試過你的代碼,但仍然拋出相同的錯誤 –

+0

你檢查了你的web.config嗎?爲確保連接字符串「cn」已設置?如果這是一臺開發機器,您可以在調試模式下驗證它。 – nunespascal

+0

我已經粘貼了我的app.config代碼,請查看是否可以。 –