C# 无法更新通过数据集连接到数据库的行
我正在尝试更新表中的一行。 如果row.FirstMessageId==null,那么我会向Messages表询问该特定聊天的第一条消息。 然后我将Message.id放入row.FirstMessageId 但是。。。什么也没发生。数据库未更新 我错过了什么? 谢谢。:) 找到解决方案。 我通过C# 无法更新通过数据集连接到数据库的行,c#,dataset,row,C#,Dataset,Row,我正在尝试更新表中的一行。 如果row.FirstMessageId==null,那么我会向Messages表询问该特定聊天的第一条消息。 然后我将Message.id放入row.FirstMessageId 但是。。。什么也没发生。数据库未更新 我错过了什么? 谢谢。:) 找到解决方案。 我通过chatsTableAdapter.update(行)更新数据 (不要介意如果(messages.Rows.Count为1),则原始数据库不是“干净的”,这意味着我现在最好忽略一些事情) 你调试了吗?c
chatsTableAdapter.update(行)
更新数据
(不要介意如果(messages.Rows.Count为1)
,则原始数据库不是“干净的”,这意味着我现在最好忽略一些事情)
你调试了吗?
chats
变量中是否有数据?是否设置了一些断点进行检查?是否确定已成功连接到db?我很高兴您找到了一些有效的方法,但您是否考虑过使用ORM来处理数据库交互?LINQtoSQL仍然是.NET的一部分,实体框架是一个丑陋但通用的系统,Linq2DB相当容易使用。。。有很多选择可以让你的生活更简单。@MarioLOBO相信我,一个好的ORM会让你的生活更简单。这就是他们设计的目的。花一天时间,学习如何使用Linq2DB或其他东西,你不会后悔的。(我偶尔向Linq2DB投稿,仅供参考。)更新只会更改数据库中已有的值,不会添加新值(也不会删除)。它实际上是将FirstMessageId
放入正确的列中。我上面说过,有四种类型的命令1)选择2)更新3)插入4)删除。您的代码只执行选择和更新,而不是插入和删除。您需要一个命令生成器来完成这四个步骤。我最初的问题是关于更新以及为什么不更新。您最初的代码有“chat.AcceptChanges();”和accept changes,这四个方法都需要。
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();
}
}
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);
}
}