我有一个简单的问题,但解决方案并不那么简单......我目前正在将一些数据插入数据库,如下所示:
kompenzacijeDataSet.KompenzacijeRow kompenzacija = kompenzacijeDataSet.Kompenzacije.NewKompenzacijeRow();
kompenzacija.Datum = DateTime.Now;
kompenzacija.PodjetjeID = stranka.id;
kompenzacija.Znesek = Decimal.Parse(tbZnesek.Text);
kompenzacijeDataSet.Kompenzacije.Rows.Add(kompenzacija);
kompenzacijeDataSetTableAdapters.KompenzacijeTableAdapter kompTA = new kompenzacijeDataSetTableAdapters.KompenzacijeTableAdapter();
kompTA.Update(this.kompenzacijeDataSet.Kompenzacije);
this.currentKompenzacijaID = LastInsertID(kompTA.Connection);
最后一行很重要。为什么我要提供连接?那么有一个 SQLite 函数叫做最后插入行ID()您可以调用并获取最后的插入 ID。问题是它绑定到一个连接,并且 .NET 似乎正在为每个数据集操作重新打开和关闭连接。我认为从表适配器获得连接会改变一切。但事实并非如此。
有人知道如何解决这个问题吗?也许从哪里获得持续的连接?或者也许是更优雅的东西?
谢谢。
EDIT:
这也是事务的问题,如果我想使用事务,我需要相同的连接,所以这也是一个问题......
将 C# (.net 4.0) 与 SQLite 结合使用,SQLiteConnection 类有一个属性LastInsertRowId
等于最近插入(或更新)元素的主整数键。
如果表没有主整数键,则返回 rowID(在这种情况下,rowID 是自动创建的列)。
See https://www.sqlite.org/c3ref/last_insert_rowid.html https://www.sqlite.org/c3ref/last_insert_rowid.html了解更多。
至于将多个命令包装在单个事务中,事务开始之后和提交之前输入的任何命令都是一个事务的一部分。
long rowID;
using (SQLiteConnection con = new SQLiteConnection([datasource])
{
SQLiteTransaction transaction = null;
transaction = con.BeginTransaction();
... [execute insert statement]
rowID = con.LastInsertRowId;
transaction.Commit()
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)