gpt4 book ai didi

c# - 无法处理 System.Data.SqlTypes.SqlNullValueException

转载 作者:太空狗 更新时间:2023-10-30 00:20:11 29 4
gpt4 key购买 nike

我有以下代码:

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

如您所见,我正在捕获“Exception”,即全局异常。但问题是,每当执行此行 finalConId=sdr.GetString(0) 时,系统都会抛出 System.Data.SqlTypes.SqlNullValueException

是的,只要数据库中相应字段中有 NULL 值,它肯定会抛出它。但我想要的是这个异常应该被 catch block 捕获,并且函数应该返回 finalConId 的默认值,即函数启动时声明的 NULL。但这并没有发生,而是显示了我的错误页面。我这样调用这个函数:

string conid = getFinalCon(Request["id"].ToString());

if (conid == null)
{ /*---some code---*/}
else
{/*---some code---*}

我该如何处理这个异常?

最佳答案

不要在不需要时捕获异常。执行此操作的正确方法是在调用 sdr.GetString(0) 之前测试 sdr.IsDBNull(0)。如果IsDBNull()返回 true,则 GetString() 将抛出异常,您不应调用它。

吞下所有异常而不指示某种错误也是非常糟糕的做法。几乎在所有情况下都应避免使用 catch { } catch (Exception) { } 。如果发生灾难性事件(例如,数据库连接中断),您希望允许该异常传播。否则,调用者如何区分“该列中的空值”和“数据库连接已死”的情况?

关于c# - 无法处理 System.Data.SqlTypes.SqlNullValueException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13579127/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com