gpt4 book ai didi

database - 如何将命令/SQL 语句添加到强类型 TableAdapter 的更新/插入命令?

转载 作者:搜寻专家 更新时间:2023-10-30 22:22:10 26 4
gpt4 key购买 nike

参见 this question .我有以下使用强类型数据集对 SQLIte 数据库执行的代码。

        messagesAdapter.Update(messages);//messages is a DataTable
var connection = messagesAdapter.Connection;
var retrieveIndexCommand= connection.CreateCommand();
retrieveIndexCommand.CommandText = @"Select last_insert_rowid()";
connection.Open();
var index = retrieveIndexCommand.ExecuteScalar();
connection.Close();

这不起作用,因为 last_inser_rowid() 总是返回零。这是因为它需要在 TableAdapter 的更新命令使用的同一连接期间调用。如何更改 TableAdapter 的插入或更新命令以使其返回索引?

最佳答案

如果你要插入一行,你可以使用这个:

// cast if necessary
using (var insert = (SQLiteCommand)this.Adapter.InsertCommand.Clone()) {
insert.CommandText += "; SELECT last_insert_rowid()";
foreach (SQLiteParameter parameter in insert.Parameters) {
parameter.Value = row[parameter.SourceColumn];
}
}
var index = Convert.ToInt32(insert.ExecuteScalar());

您还可以使用它来插入多行并将您的 id 分配给每一行:

using (var insert = (SQLiteCommand)this.Adapter.InsertCommand.Clone())
{
insert.CommandText += "; SELECT last_insert_rowid()";
// this filter only added rows
foreach (MyDataSet.MessageRow row in messages.GetChanges(DataRowState.Added))
{
foreach (SQLiteParameter parameter in insert.Parameters)
{
parameter.Value = row[parameter.SourceColumn];
}
// use the name of your rowid column
row.ID = Convert.ToInt32(insert.ExecuteScalar());
row.AcceptChanges();
}
}
// then you can perfom the other updates
messagesAdapter.Update(messages);

注意:一定要打开/关闭你的连接

关于database - 如何将命令/SQL 语句添加到强类型 TableAdapter 的更新/插入命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2135326/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com