【问题标题】:update query not working c#更新查询不起作用c#
【发布时间】:2012-09-05 11:47:21
【问题描述】:

我在 sql management studio 中使用过这个查询并且它有效,我尝试了一个没有and 条件的缩短查询并且它有效,为什么and 条件破坏了代码?

string dbQuery = "update log_file set updated = @true where urn = @urn and companyid = @companyid";
cmd.Parameters.Add(new SqlParameter("@urn", SqlDbType.Int)).Value = urn;
cmd.Parameters.Add(new SqlParameter("@companyid", SqlDbType.Int)).Value = companyid;
cmd.Parameters.Add(new SqlParameter("@true", SqlDbType.Bit)).Value = 0;

cmd.CommandText = (dbQuery);
cmd.CommandType = CommandType.Text;
cmd.Connection = conn;
cmd.ExecuteNonQuery();

【问题讨论】:

  • 你使用什么数据库?
  • 错误说明了什么?
  • 在没有AND 的情况下它可以工作是什么意思?你怎么看AND破坏了你的代码?
  • update log_file set updated = 0
  • 您的连接是否正确处理(关闭)?

标签: c# sql sql-server sqlcommand


【解决方案1】:

如果 and companyid = @companyid 导致它无法工作(我假设您的意思是更新没有发生而不是收到错误消息,那么唯一的解释是您传递的 companyid 不正确。可能是您的Management Studio 中的测试使用的是您认为它应该具有的值,而不是它实际使用的值。

您应该在调试会话中确认所有参数都正确,然后找出不正确的原因。

【讨论】:

  • 我已经测试了值并且它们是正确的,我手动传递它们,因为它是一个 Web 服务,所以我知道值是正确的
  • 使用这个方法我测试值 System.Web.HttpContext.Current.Response.Write(sqlparameter["@urn"].value);给了我价值,我什至尝试过硬编码。
  • 您能否明确显示有效的查询和无效的查询?你是说发送一个完全没有参数化的硬编码 sql 语句仍然失败,而它在 Management Studio 中工作?如果是这样,那么我唯一能想到的就是您连接到错误的服务器,或者您在某处使用事务并且没有正确提交它......
  • 在 sql 中可以这样工作:update log_file set updated = 1 where urn = 115 and companyid = 1,我将相同的值传递给我的查询,但它没有
  • 您的命令对象是新创建的(想知道它是否可能被先前的查询污染)?
【解决方案2】:

Bit 类型用 false 替换

cmd.Parameters.Add(new SqlParameter("@true", SqlDbType.Bit)).Value = false;

如果要使用 0 作为值,请将类型参数替换为 Int

【讨论】:

  • 这意味着缩短的查询不起作用,但它确实起作用,而且我尝试将类型更改为 int 和 bit,并在 sql server 中更改类型,但它仍然不起作用
  • @Candie:你有不能使用0的参考吗?我看了一眼(因为它让我感到惊讶)并且找不到任何说明...鉴于 1/0 在 SQL 中有效,如果 .NET 驱动程序不允许它,我会感到惊讶...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多