C# 更新命令错误

C# 更新命令错误,c#,.net,sql,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]["Col

我想在表单中按代码更新行。可能有些列是空的。所以,尽管命令是 执行时,会出现错误,并在关键字“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();
我知道将显示此错误,因为第[“Column15”]行为空。 如何检查datarow中的列是否为空;当然,在Update命令之前没有任何额外的变量或命令。 我的意思是在update命令中精确地检查列。

您可以使用

var value = "" + Row["columnname"] ; 
因此,不需要检查对象是否为null

它是安全的

您可以使用

var value = "" + Row["columnname"] ; 
因此,不需要检查对象是否为null


它是安全的

我建议使用SqlParameters,同时
SqlCommand
实现
IDisposable
,因此您应该使用
语句将其封装在
中,例如

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是有效的列值。

我建议使用SqlParameters,也
SqlCommand
实现
IDisposable
,因此您应该使用
语句将其包装在
中,例如

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是有效的列值。

您可以这样做:

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字符串中。

您可以这样做:

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字符串中。

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

行[15]=“删除数据库;”--“
在您的情况下足以导致所有数据丢失;)(请参阅您最喜欢的搜索引擎上的“SQL注入”

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


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

是行,数据行吗?你应该使用字符串生成器,而不是直接使用。如果你接受了对你已经提出的问题有帮助的答案,你将来更有可能得到答案。这并不难。行是数据行吗?你应该使用字符串生成器,而不是直接使用。你是如果你接受了对你已经提出的问题有帮助的答案,你很可能会得到未来的答案。这并不难做到。