【问题标题】:Update SQL comand doesn't change the data更新 SQL 命令不会更改数据
【发布时间】:2016-04-21 03:02:35
【问题描述】:

我知道这可能是个愚蠢的问题。但是这个查询不起作用。我搜索解决方案超过 1 小时。 请帮忙

 public static bool ChangeEventStatus(Connector cn, EventData eventData)
    {
        int updatedRows = 0;

        using (OleDbCommand cmd = cn.CreateCommand())
        {
            cmd.CommandText = "Update EventList Set IsProcessed = ? Where EventId = ?";

            cmd.Parameters.Add("IsProcessed", OleDbType.Boolean).Value = true;
            cmd.Parameters.Add("EventId", OleDbType.BigInt).Value = eventData.EventId;


            updatedRows = cmd.ExecuteNonQuery();

        }

        return (updatedRows == 1);
    }

我的代码有什么问题。 ChangeEventStatus 方法返回 true,但数据库记录不会改变。

【问题讨论】:

  • 也许您在更改后没有刷新您的表格?
  • 我每次都刷新
  • 确定 eventid 正确吗?
  • 你连接的是什么类型的数据库?
  • @AlexK。是的,我每次都查一下

标签: c# sql ado.net sql-update insert-update


【解决方案1】:

我稍微更改了代码并编写了测试。一切正常。 检查:

  • 连接字符串
  • 您是否将正确的 EventId 传递给函数?

    [TestClass]
    public class UnitTest1
    {
      [TestMethod]
      public void TestMethod1()
      {
        Assert.AreEqual(true, ChangeEventStatus(new EventData() {EventId = 3}));
      }
    
      private static bool ChangeEventStatus(EventData eventData)
      {
          int updatedRows = 0;
    
          using (var cn = new OleDbConnection("Provider=sqloledb;Data Source=localhost;Initial Catalog=FastExperiments;User Id = sa; Password = pass; "))
          {
            using (OleDbCommand cmd = cn.CreateCommand())
            {
                cn.Open();
    
                cmd.CommandText = "Update EventList Set IsProcessed = ? Where EventId = ?";
    
                cmd.Parameters.Add("IsProcessed", OleDbType.Boolean).Value = true;
                cmd.Parameters.Add("EventId", OleDbType.BigInt).Value = eventData.EventId;
    
                updatedRows = cmd.ExecuteNonQuery();
            }
          }
          return (updatedRows == 1);
      }
    
      private class EventData
      {
        public int EventId { get; set; }
      }
    }
    

【讨论】:

    【解决方案2】:

    我发现了问题。感谢大家。更新后我忘记提交事务了

    【讨论】:

    • 在 SQL Server 事务中执行语句“Update EventList Set IsProcessed = ? where EventId = ?”后自动提交上面我的答案中的测试显示了它。您的 SQL Server 是否有特殊设置?
    【解决方案3】:
     public static bool ChangeEventStatus(Connector cn, EventData eventData)
     {
            int updatedRows = 0;
    
             using (OleDbConnection conn = new OleDbConnection(someConnectionString));
            {
                 conn.Open();
                 using (OleDbCommand cmd = cn.CreateCommand())
                 {
                     cmd.CommandText = "Update EventList Set IsProcessed = ? Where EventId = ?";
    
                     cmd.Parameters.Add("@IsProcessed", OleDbType.Boolean).Value = true;
                     cmd.Parameters.Add("@EventId", OleDbType.BigInt).Value = eventData.EventId;
    
    
                     updatedRows = cmd.ExecuteNonQuery();
    
            }
    
            return (updatedRows == 1);
        }
    }
    

    【讨论】:

    • 您确定@登录添加参数吗?
    • AFAIK 是否输入@ 并不重要,因为参数应按正确的顺序定义;名字不重要,重要的是顺序。
    • @ElvinMammadov 代码与执行命令前打开连接不一样。
    猜你喜欢
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多