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

私があなただったら、あなたのようにコードをチェーンすることは避けますが、いくつかのオブジェクトがその行で例外をスローする可能性があり、どれを特定することができないため、デバッグが難しくなります。

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

これで、例外をスローできる 3 つの行ができ、犯人を簡単に見つけることができます。

于 2012-09-01T18:01:37.013 に答える
0

最も可能性の高い原因はExecuteDataset、レコードが見つからないときに null を返すことです。

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

注:データが見つからない場合、この関数は null を返すため、後で null チェックも行う必要があります。

于 2012-09-01T15:23:58.420 に答える