Shi*_*eek 4 c# asp.net null sqlexception sql-server-2008
我有以下代码:
public string getFinalCon(string desid)
{
string finalConId = null;
try
{
query = "select finalConID from discussions where desid=@did";
com = new SqlCommand(query, con);
com.Parameters.AddWithValue("@did", desid);
con.Open();
sdr = com.ExecuteReader();
while (sdr.Read())
{
if (sdr.GetString(0).Equals("none") == false && sdr.GetString(0)!=null)
{
finalConId = sdr.GetString(0);
break;
}
}
con.Close();
}
catch (Exception)
{
}
return finalConId;
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在捕捉"异常",即全局异常.但问题是每当执行此行finalConId = sdr.GetString(0)时,系统都会抛出System.Data.SqlTypes.SqlNullValueException.是的,只要相应字段中的数据库中存在NULL值,它肯定会抛出它.但我想要的是这个异常应该被catch块捕获,并且函数应该返回默认值finalConId,该函数在启动时声明为NULL.但这不会发生,而是显示我的错误页面.我这样调用这个函数:
string conid = getFinalCon(Request["id"].ToString());
if (conid == null)
{ /*---some code---*/}
else
{/*---some code---*}
Run Code Online (Sandbox Code Playgroud)
请有人告诉我如何处理这个例外.
不需要时不要捕获异常.正确的方法是sdr.IsDBNull(0)在打电话之前进行测试sdr.GetString(0).如果IsDBNull()返回true,则GetString()抛出异常而不应该调用它.
在没有指出某种错误的情况下吞下所有异常也是非常糟糕的做法. catch { }或catch (Exception) { }几乎在所有情况下都应该避免.如果发生灾难性事件(例如,DB连接断开),您希望允许该异常传播.否则,调用者如何区分"该列中的空值"和"数据库连接死亡?"的情况.
| 归档时间: |
|
| 查看次数: |
9510 次 |
| 最近记录: |