2013-08-07 67 views
2

我有一個組合框名稱爲cmbCity,它的dataSource爲DisplayMember「CityName」(字符串類型)和ValueMember「ValueID」(數字類型)。無法在string.Format中傳遞空值()

現在對於更新dataTable我有查詢

string query = string.Format("Update TableName Set StringTypeColmName = '{0}' , NumberTypeColmName = {1}", 
          "StringValue", 
          !string.IsNullOrEmpty(cmbCity.Text) ? cmbCity.SelectedValue : DBNull.Value);`. 

它正常工作,如果用戶選擇值形式cmbCity,我得到的值由cmbCity.SelectedValue通過,如果用戶不選擇任何值,那麼我試圖通過在數據庫中的空值該字段,但在格式化字符串之後,我得到這樣

Update TableName Set StringTypeColmName = 'StringValue' , NumberTypeColmName = " 
在這個輸出字符串空值

不存在,並最終在執行查詢我的異常Syntax error in UPDATE statement.值。任何幫助如何在輸出查詢中添加空值。我正在使用MS-Accesss數據庫和VS2010。

回答

3

這應該工作,你應該通過「空」字符串,如果該值不存在:

string.Format("Update TableName Set StringTypeColmName = '{0}' , NumberTypeColmName = {1}", 
"StringValue", !string.IsNullOrEmpty(cmbCity.Text) ? cmbCity.SelectedValue.ToString() : "null"); 
+2

而在這個查詢比較恰好發生在哪裏? – gzaxx

+0

@ gzaxx你的回答是正確的 –

+1

是的,它的工作感謝你的回答。我會在5分鐘後將其標記爲答案! –

8

你或許應該(不,從頭開始,絕對)不要使用字符串格式化爲建設parametrised SQL查詢。相反,使用適當的類,例如:

using (var cmd = new OleDbCommand("Update TableName Set StringTypeColmName = ?, NumberTypeColmName = ?", connection)) 
{ 
    cmd.Parameters.AddWithValue("string", "StringValue"); 
    cmd.Parameters.AddWithValue("num", !string.IsNullOrEmpty(cmbCity.Text) ? cmbCity.SelectedValue : DBNull.Value); 

    cmd.ExecuteNonQuery(); 
} 

由於此使用的數據庫驅動程序來處理更換參數其實這是安全的做法,即使在價值ToString()會導致空字符串。

+0

道歉,如果這是錯誤的,我仍然試圖找出如何正確使用OleDbCommand參數。但總體思路仍然有效。 – Joey

+0

是的,這也是一種更新數據表的方法,但在colm datatable的數量的情況下,我喜歡使用格式化的字符串,而不是傳遞參數查詢..!這會減少代碼並提高代碼的可讀性。在這種情況下'ToString()'起作用,因爲我已經添加了'IsNullOrEmpty()'檢查。 –