Как безопасно запросить потенциально несуществующее значение в SQLite?
У меня есть этот код, который работает, пока есть соответствующее значение в базе данных:
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;
}
Однако, если нет совпадения (значение Id, переданное как deptId, не существует в таблице), возникает NRE. Есть ли альтернатива ExecuteScalar(), которая изящно провалится? Например, просто вернуть пустую строку?
2 ответа
Решение
Вместо звонка ToString
использование Convert.ToString
метод как:
deptName = Convert.ToString(cmd.ExecuteScalar());
это вернет пустую строку в случае null
или же DBNull.Value
возвращается
Вы можете просто проверить результат:
var result = cmd.ExecuteScalar();
deptName = result == null ? "" : result.ToString();