-1

データベースに一致する値がある限り機能する次のコードがあります。

public String GetDeptNameForDeptId(int deptId)
{
    String deptName;
    const string qry = "SELECT Name FROM Department WHERE Id = @deptID";

    try
    {
        using (SQLiteConnection con = new SQLiteConnection(HHSUtils.GetDBConnection()))
        {
            con.Open();
            SQLiteCommand cmd = new SQLiteCommand(qry, con);
            cmd.Parameters.Add(new SQLiteParameter("deptID", deptId));
            deptName = cmd.ExecuteScalar().ToString();
        }
    }
    catch (Exception ex)
    {
        String msgInnerExAndStackTrace = String.Format(
            "{0}; Inner Ex: {1}; Stack Trace: {2}", ex.Message, ex.InnerException, ex.StackTrace);
        ExceptionLoggingService.Instance.WriteLog(String.Format("From Platypus.GetDeptNameForDeptId: {0}", msgInnerExAndStackTrace));
        return "No matching value found"; //String.Empty;
    }
    return deptName;
}

ただし、一致がない場合 (deptId として渡された Id val がテーブルに存在しない場合)、NRE が発生します。正常に失敗する ExecuteScalar() の代替手段はありますか? 空の文字列を返すだけですか?

4

2 に答える 2

4

Instead of calling ToString use Convert.ToString method like:

 deptName = Convert.ToString(cmd.ExecuteScalar());

this will return empty string in case of null or DBNull.Value being returned.

于 2015-02-10T17:45:04.773 に答える
2

結果を確認するだけです:

var result = cmd.ExecuteScalar();
deptName = result == null ? "" : result.ToString();
于 2015-02-10T17:40:36.080 に答える