更新命令错误
本文关键字:错误 命令 更新 | 更新日期: 2023-09-27 18:18:24
我想通过代码更新表单中的一行。也许有些列是空的。所以while命令是执行时,将在关键字'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命令中检查列
我建议使用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是有效的列值。
我怀疑你必须用数据库关键字NULL"替换".net null
。string sql = "Column15 = " + (row[15] == null ? "NULL" : row[15].ToString())
在你的情况下,但更好的方法是使用James写的参数,也要记住有人可能会为你的查询提供有害的字符串:
row[15] = ";DROP DATABASE; --"
将足以在您的情况下,导致您的所有数据丢失;)(见"SQL注入"在您最喜欢的搜索引擎
你可以使用
var value = "" + Row["columnname"] ;
所以,你不需要检查对象是否为空
它是安全的…
你可以这样做:
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字符串