我想通过表单中的代码更新一行。也许有些列为空。所以虽然命令是 执行时,错误会上升,并在关键字'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命令中完全检查列。
答案 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字符串。