【问题标题】:Cannot update row connecting to database via dataset无法更新通过数据集连接到数据库的行
【发布时间】:2020-12-13 22:01:48
【问题描述】:

我正在尝试更新表中的一行。 如果 row.FirstMessageId == null 然后我向 Messages 表询问该特定聊天的第一条消息。 然后我将 Message.id 放入 row.FirstMessageId

但是……什么也没有发生。数据库未更新。

我错过了什么? 谢谢你。 :)

using (ChatsTableAdapter chatsTableAdapter = new ChatsTableAdapter())
using (ArchiveDataSet.ChatsDataTable chats = chatsTableAdapter.GetData())
    foreach (ArchiveDataSet.ChatsRow chat in chats)
    {
        if (chat.IsFirstMessageIdNull())
            using (ArchiveDataSet.MessagesDataTable messages =
                new MessagesTableAdapter().GetFirstMessage
                (chat.ChatId))

        if (messages.Rows.Count is 1)
        {
            ArchiveDataSet.MessagesRow message = (ArchiveDataSet.MessagesRow)(messages.Rows[0]);
            chat.FirstMessageId = message.MessageId;
            chat.AcceptChanges();
        }
    }

【问题讨论】:

  • 你调试了吗? chats 变量中有数据吗?
  • 你是否设置了一些断点来检查?
  • 你确定你连接db成功了吗?
  • 很高兴您找到了一些可行的方法,但您是否考虑过使用 ORM 为您处理数据库交互? LINQtoSQL 仍然是 .NET 的一部分,Entity Frameworks 是一个丑陋但用途广泛的系统,Linq2DB 相当容易使用......有很多替代品可以让您的生活变得更简单。
  • @MarioLOBO 相信我,一个好的 ORM 会让事情变得更简单。这就是他们的设计目的。花一天时间,学习如何使用 Linq2DB 或其他东西,你不会后悔的。 (我偶尔会为 Linq2DB 做出贡献,仅供参考。)

标签: c# dataset row


【解决方案1】:

找到解决方案。 我通过chatsTableAdapter.Update(row)更新数据。

(别管if (messages.Rows.Count is 1),原始数据库不是“干净”的,这意味着我现在最好忽略一些东西)

using (ChatsTableAdapter chatsTableAdapter = new ChatsTableAdapter())
using (ArchiveDataSet.ChatsDataTable chats = chatsTableAdapter.GetData())
    foreach (ArchiveDataSet.ChatsRow chat in chats)
    {
        if (chat.IsFirstMessageIdNull())
            using (ArchiveDataSet.MessagesDataTable messages =
                new MessagesTableAdapter().GetFirstMessage(chat.ChatId))
                if (messages.Rows.Count is 1)
                {
                    ArchiveDataSet.MessagesRow message = (ArchiveDataSet.MessagesRow)(messages.Rows[0]);
                    chat.FirstMessageId = message.MessageId;
                    chatsTableAdapter.Update(chat);
                }
    }

【讨论】:

  • 更新只会更改数据库中已有的值,不会添加新值(也不会删除)。
  • 实际上是将FirstMessageId 放入正确的列中。
  • 我上面说过,命令有四种类型 1) 选择 2) 更新 3) 插入 4) 删除。您的代码只执行选择和更新,而不是插入和删除。您需要一个命令生成器来完成所有四个操作。
  • 我最初的问题是关于更新,以及为什么它没有更新。
  • 你原来的代码有“chat.AcceptChanges();”并接受所有 4 种方法所需的更改。
猜你喜欢
  • 1970-01-01
  • 2015-01-08
  • 2010-10-02
  • 2019-02-03
  • 2012-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多