2011-12-21 6 views
0

私のフォームのコードで行を更新したいと思います。たぶん一部の列がnullです。コマンドは の実行中に、エラーがキーワード「」の近くに不正な構文を上昇し、言うので:更新コマンドエラー

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」]はnullであるため、このエラーが表示されます知っています。 datarowの列がnullであるかどうかを確認する方法はありますか。もちろん、Updateコマンドの前に余分な変数やコマンドがなくてもかまいません。 更新コマンドで正確に列をチェックすることを意味します。

+0

データ行はROWですか?文字列ビルダを直接実行するのではなく、 – lloydom

+0

を使用する必要があります。あなたが既に尋ねた質問にあなたを助けてくれました。それは難しいことではありません。 –

答えて

0

あなたがそう

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

を使用することができ、あなたは、オブジェクトをチェックする必要はありません、それは安全である

ヌル..です

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=""; 

そして、あなたは自分のSqlCommandオブジェクトの文字列にfilterString変数を追加することができます。

1

私はあなたが "交換する"と思っています。nullとデータベースキーワードはNULLです。にすべてのデータを引き起こすために、あなたのケースで十分だろう

row[15] = ";DROP DATABASE; --":あなたのケースでは string sql = "Column15 = " + (row[15] == null ? "NULL" : row[15].ToString())が、はるかに良い方法はあなたのクエリにhamful文字列を提供することができジェームズによって書かれたとしても、パラメータを使用して心の誰かに維持することです)あなたが好きな検索エンジンの "SQLインジェクション"を参照してください

+0

ありがとうございました。 – user422481