在访问中将数据插入多个表的最佳方法?

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 是否也支持,但我没有玩过。

以上是关于在访问中将数据插入多个表的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章

使用Android中的内容提供程序公开多个表的最佳实践

在列中插入默认值(访问数据库)

跨多个服务器访问不同数据库的表的方法

第一次将数据从其他来源插入应用程序表的最佳方法是啥?

将数据插入 Bigquery 表的最佳方法

在 ASP.NET API 中将数据插入多个表