2011-12-21 88 views
0

我想通過我的表單中的代碼更新一行。也許有些列是空的。因此,雖然命令 執行,錯誤會站起來說不正確的語法關鍵字「其中」附近:更新命令錯誤

SqlCommand Update = new SqlCommand("Update Table_065_Turn SET Column02=" + Row["Column48"] + " , Column15= " + Row["Column15"].ToString() + 
" where ColumnId=" + StatusTable.Rows[0]["ColumnId"], Con); 
Update.ExecuteNonQuery(); 

我知道會出現該錯誤消息,因爲行[「Column15」]爲空。 如何檢查數據行中的列是否爲空;當然在Update命令之前沒有任何額外的變量或命令。 我的意思是確切地在更新命令中檢查列。

+0

是ROW,一個數據行嗎?您應該使用字符串生成器而不是直接執行 – lloydom 2011-12-21 08:52:13

+0

如果您接受答案,您將更有可能獲得未來答案在你已經問過的問題上幫助你,這不是很難。 – 2011-12-30 21:03:45

回答

0

你可以使用

var value = "" + Row["columnname"] ; 

所以,你不需要檢查對象爲null

它是安全的..

2

我會建議使用SqlParameters,也SqlCommand實現IDisposable所以你應該把它包裝在一個using聲明例如

using (SqlCommand update = new SqlCommand("Update Table_065_Turn SET [email protected], [email protected] where [email protected]", con)) 
{ 
    update.Parameters.AddWithValue("@Col2", Row["Column48"]); 
    update.Parameters.AddWithValue("@Col15", Row["Column15"]); 
    update.Parameters.AddWithValue("@ColId", StatusTable.Rows[0]["ColumnId"]); 
    update.ExecuteNonQuery(); 
} 

你也可能會更好實際驗證,除非null是一個有效的列值執行查詢前場。

0

你可以這樣做:

string filterString; 
if (StatusTable.Rows[0]["ColumnId"]!=System.DBNull.Value) 
    filterString= @" WHERE ColumnID= StatusTable.Rows[0]["ColumnId"]";//I assume the value returned is a string 
else 
    filterString=""; 

然後你可以追加filterString變量設置爲SqlCommand的字符串。

1

我懷疑你必須用數據庫關鍵字「NULL」替換「.net null」。 string sql = "Column15 = " + (row[15] == null ? "NULL" : row[15].ToString())你的情況,但更好的方法是使用參數書面詹姆斯,也牢記有人可以提供hamful字符串查詢:

row[15] = ";DROP DATABASE; --"就足以在你的情況下,將所有數據引起)(請參閱您最喜愛的搜索引擎上的「SQL注入」

+0

謝謝你,這是對的 – user422481 2011-12-21 11:27:19