在访问中将数据插入多个表的最佳方法?
Posted
技术标签:
【中文标题】在访问中将数据插入多个表的最佳方法?【英文标题】:Best way to insert data into multiple tables in access? 【发布时间】:2012-01-06 20:18:01 【问题描述】:好的,这是我的数据库:
我的 .net 表单上有一个页面,可让用户将锻炼和该锻炼的相关肌肉插入到访问数据库中。
在 WorkOuts 表中插入一条记录后,如何在不选择刚刚插入的锻炼的最大 ID 的情况下将相关肌肉插入到 MuscleGroup 表中?我想同时插入所有东西。希望我的问题有意义,我认为这是一个常见的数据库问题,但我还没有找到解决方案。
【问题讨论】:
【参考方案1】:虽然我同意您应该考虑使用备用 RDBM,但您可以使用以下代码(假设您使用 OLEDB 和 C#)来检索由 MS-Access 插入语句生成的正确自动编号:
public static object InsertRow_ReturnKey()
try
using (OleDbConnection con = new OleDbConnection())
con.ConnectionString = Users.GetConnectionString();
con.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "INSERT INTO WorkOuts(Workout) VALUES('Abs')";
cmd.ExecuteNonQuery();
cmd.CommandText = "SELECT @@IDENTITY";
return cmd.ExecuteScalar();
catch (Exception ex)
System.Web.HttpContext.Current.Response.Write(ex.Message);
System.Web.HttpContext.Current.Response.StatusCode = 500;
return null;
使用调用它:
int newID = (int)DB.InsertRow_ReturnKey();
【讨论】:
我不知道 access 有这个功能。很高兴知道这一点! 酷。此代码用于 Web 应用程序,但也可用于 WinForms 或 WPF。请注意,此技术也可以与 ADO 和 DAO 一起使用。【参考方案2】:是的,这很常见,但至少需要 3 个查询,如果不是更多的话,因为它可以访问。
-
插入记录
检索id
每个肌肉群一个(您可能能够将这些结合起来,但我对此表示怀疑)
Access 对于数据库来说也是一个糟糕的选择,因为它缺乏企业级数据库的许多功能和 ado.net 支持。交易是最大的缺失特性,命名参数是第二个。
如果您需要“更小”或免费的数据库解决方案,请查看 SqlExpress、SqlLite 或 Posgress。由于您当前的目标是 Access,因此其中任何一个都可以使用。
【讨论】:
是的,我使用访问权限的次数越多,我就越讨厌它。我必须在 SQL 中重做。 真的吗?因为每当我阅读或看到对 Access 和 Ado.Net(或数据访问框架)的引用时,这些都是开发人员遇到的前两个问题。 @JasonMeckley 请参阅Create a transaction for ms-asccess in c# 了解交易。命名参数更加复杂。 QueryDefs 支持它们。它们不使用内联 SQL。您必须使用“?”。我不知道 SQLLite 或 Progess 是否也支持,但我没有玩过。以上是关于在访问中将数据插入多个表的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章