2017-06-09 1 views
0

データベース内のチェックボックスの値がnullの場合、エラーをスローします。 0または1の場合、期待どおりに動作します。 RDBMSの面でチェックボックスの値がnullの場合。プログラムはこのエラーをスローします。「オブジェクトはDBNullから他の型にキャストできません。

if (Request.QueryString["Sckey"] != null && Request.QueryString["Sckey"].ToString() != "") 
{ 
    string str_sql1 = "select ScenarioSeq,ScenarioName,FileName,ScenarioNotes,IsUpperCase from Scenario where [email protected];"; 
    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"]);  
} 
+0

はい、エラーが示すように、他のタイプにキャストすることはできません。ブール値としてのnullは何ですか?あなたはそれを別々にチェックしなければなりません。 - dr ["IsUpperCase"]を使用した直接バインディングの代わりに –

+0

を使用する場合は、最初にnullであるかどうかを確認する必要があります。 nullの場合はFalseに設定し、nullでない場合はConvert.ToBooleanに設定します。 – Nirman

+0

不適切な質問書式と無関係なコメント付きコードを元のコードから削除しました... nullをブール値に変換しようとしています。それは何であるべきですか?あなたは何も真実または偽に変換しようとしていません。 – Reniuz

答えて

0

このような何かを...

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

Null特別な意味を持って、それが無効不明の略で、を適用することはできませんなどです。そのため、キャストすることはできません(bool値(true,))をに使用する必要があります公知の?)。 dr.IsNull("IsUpperCase")をお試しください:

ch_Uppercase.Checked = !dr.IsNull("IsUpperCase") && Convert.ToBoolean(dr["IsUpperCase"]); 
+0

ありがとうございました!出来た。! – Harry

0
int number; 
bool result = Int32.TryParse(dr["IsUpperCase"], out number); 
ch_Uppercase.Checked = number; 
0

はこのようにそれを修正してください。

ch_Uppercase.Checked = !dr.IsNull ? Convert.ToBoolean(dr["IsUpperCase"]) : false; 
関連する問題