C# 当复选框值为空时。程序抛出此错误“;对象不能从DBNull强制转换为其他类型。”;

C# 当复选框值为空时。程序抛出此错误“;对象不能从DBNull强制转换为其他类型。”;,c#,.net,C#,.net,当数据库中的复选框值为null时,将抛出错误。当它为0或1时,它会按预期工作 if (Request.QueryString["Sckey"] != null && Request.QueryString["Sckey"].ToString() != "") { string str_sql1 = "select ScenarioSeq,ScenarioName,FileName,ScenarioNotes,IsUpperCase from Scenario where

当数据库中的复选框值为null时,将抛出错误。当它为
0
1
时,它会按预期工作

if (Request.QueryString["Sckey"] != null && Request.QueryString["Sckey"].ToString() != "")
{
    string str_sql1 = "select ScenarioSeq,ScenarioName,FileName,ScenarioNotes,IsUpperCase from Scenario where ScenarioKey=@ScenarioKey;";
    SqlCommand cm = new SqlCommand(str_sql1);
    cm.Parameters.AddWithValue("@ScenarioKey", str_ScKey);
    DataSet ds2 = this.DA.GetDataSet(cm);

    DataRow dr = ds2.Tables[0].Rows[0];
    txt_ScenarioName.Text = dr["ScenarioName"].ToString();
    txt_ScenarioNotes.Text = dr["ScenarioNotes"].ToString();
    ch_Uppercase.Checked = Convert.ToBoolean(dr["IsUpperCase"]);     
}

做这样的事

ch_Uppercase.Checked = 
     Convert.ToBoolean(dr["IsUpperCase"] == DBNull.Value? 0: dr["IsUpperCase"]);

做这样的事

ch_Uppercase.Checked = 
     Convert.ToBoolean(dr["IsUpperCase"] == DBNull.Value? 0: dr["IsUpperCase"]);

Null
在RDBMS的术语中有一个特殊的含义,它代表未知、无效、不能应用于等,这就是为什么不能强制转换(对于未知,应该使用什么
bool
值(
true
false
)。请尝试
dr.IsNull(“IsUpperCase”)


Null
在RDBMS的术语中有一个特殊的含义,它代表未知、无效、不能应用于等,这就是为什么不能强制转换(对于未知,应该使用什么
bool
值(
true
false
)。请尝试
dr.IsNull(“IsUpperCase”)

像这样纠正它

ch_Uppercase.Checked = !dr.IsNull ? Convert.ToBoolean(dr["IsUpperCase"]) : false;
像这样纠正它

ch_Uppercase.Checked = !dr.IsNull ? Convert.ToBoolean(dr["IsUpperCase"]) : false;

是的,正如错误所说,不能转换为其他类型。什么是空布尔值?您必须单独检查它。您应该首先验证它是否为null,而不是直接与-dr[“IsUpperCase”]绑定。如果为null,则设置为False;如果不为null,则将其设置为Convert.ToBoolean,因为您已经完成了从原始代码中删除的不适当的问题格式和无关的注释代码…您正在尝试将null转换为布尔值。应该是什么?您正在尝试不将任何内容转换为true或false。可能应该在此处进行空检查:
ch_Uppercase.Checked=convert.ToBoolean(IsDBNull(dr[“IsUpperCase”])??false)
Checked
属性为布尔值,仅接收
true
false
。是,正如错误所述,不能转换为其他类型。什么是空布尔值?您必须单独检查它。您应该首先验证它是否为null,而不是直接与-dr[“IsUpperCase”]绑定。如果为null,则设置为False;如果不为null,则将其设置为Convert.ToBoolean,因为您已经完成了从原始代码中删除的不适当的问题格式和无关的注释代码…您正在尝试将null转换为布尔值。应该是什么?您正在尝试不将任何内容转换为true或false。可能应该在此处进行空检查:
ch_Uppercase.Checked=convert.ToBoolean(IsDBNull(dr[“IsUpperCase”])??false)<代码>选中
属性为布尔值,仅接收
true
false