0

我有一个连接到数据库的 ASP.NET 项目。网页向数据库发送查询。不止一个,事实上,它成功地从数据库中读取。UPDATE单击提交按钮后,我向SQL Server (2008)发送查询。

我使用 C#,将UPDATE查询发送到服务器,并使用SqlCommand如下初始化的对象:

编辑:向查询添加了变量。

string strQuery = "UPDATE [tbl] SET [f1]='" + stringValue + "', [f2]='" + (boolValue?"1":"0") + "' WHERE [id]=" + intId.ToString() + ";";
SqlCommand cmd = new SqlCommand(strQuery, connectionObject);
int QueryResult = cmd.ExecuteNonQuery();

QueryResult 以 0 结尾,当然,没有进行任何更改。复制粘贴到 SSMS - 我得到1 row(s) affected并且数据发生了变化。

连接工作正常 - 当我使用来检查数据库上的工作时 - 查询已执行。(它看起来像(@1 varchar(8000), @2 varchar(8000), @3 tinyInt) UPDATE [tbl] SET [f1]=@1, [f2]=@2 WHERE [id]=@3;)。

任何想法发生了什么 - 赞赏。谢谢!

4

2 回答 2

2

最有可能的WHERE [id]=" + intId.ToString()是没有找到要更新的行。

这要么是因为:

  • ID 是正确的,并且该行还不存在(如果您是在手前插入它)
  • 身份证错了
  • stringValue 包含破坏您的 SQL 的东西,以至于它执行但不匹配(不太可能但可能)。
  • 您没有针对正确的数据库执行 SQL(我之前在有多个数据库的开发环境中这样做过!)

如果您在作业后的行上放置一个断点,strQuery请查看它包含的内容,并可能将其内容发布回您的问题中。

于 2012-06-13T14:48:35.300 回答
2

这是一个如何使用参数的示例

using (SqlCommand cmd = new SqlCommand())
        {
            cmd.Connection = connectionObject;
            cmd.Parameters.AddWithValue("@f1", stringValue);
            cmd.Parameters.AddWithValue("@f2", boolValue);
            cmd.Parameters.AddWithValue("@id", intId);
            cmd.CommandText = "update [tbl] set f1 = @f1 , f2 = @f2 where id = @id";
            int QueryResult = cmd.ExecuteNonQuery();

        }
于 2012-06-13T15:26:55.267 回答