更新命令错误

时间:2011-12-21 08:49:10

标签: c# .net sql

我想通过表单中的代码更新一行。也许有些列为空。所以虽然命令是 执行时,错误会上升,并在关键字'where'附近说错误的语法:

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();

我知道会显示此错误,因为Row [“Column15”]为空。 如何检查datarow中的列是否为空;当然,在Update命令之前没有任何额外的变量或命令。 我的意思是在update命令中完全检查列。

4 个答案:

答案 0 :(得分:2)

我建议使用SqlParameters,同时SqlCommand实现IDisposable,所以你应该用using语句将其包装起来,例如。

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

另外,在执行查询之前,您可能会更好地验证字段,除非null是有效的列值。

答案 1 :(得分:1)

我怀疑你必须用数据库关键字NULL“替换”.net null,例如 在你的情况下string sql = "Column15 = " + (row[15] == null ? "NULL" : row[15].ToString()),但更好的方法是使用James编写的参数,同时请记住有人可以为你的查询提供简单的字符串:

在您的情况下,

row[15] = ";DROP DATABASE; --"足以导致所有数据丢失;)(请参阅您最喜欢的搜索引擎上的“SQL注入”

答案 2 :(得分:0)

你可以使用

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

所以,你不需要检查对象是否为空

安全..

答案 3 :(得分: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字符串。