【问题标题】:Best way to insert data into multiple tables in access?在访问中将数据插入多个表的最佳方法?
【发布时间】:2012-01-06 20:18:01
【问题描述】:

好的,这是我的数据库:

我的 .net 表单上有一个页面,可让用户将锻炼和该锻炼的相关肌肉插入到访问数据库中。

在 WorkOuts 表中插入一条记录后,如何在不选择刚刚插入的锻炼的最大 ID 的情况下将相关肌肉插入到 MuscleGroup 表中?我想同时插入所有东西。希望我的问题有意义,我认为这是一个常见的数据库问题,但我还没有找到解决方案。

【问题讨论】:

    标签: .net ms-access ms-access-2007


    【解决方案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 个查询,如果不是更多的话,因为它可以访问。

    1. 插入记录
    2. 检索id
    3. 每个肌肉群一个(您可能能够将这些结合起来,但我对此表示怀疑)

    Access 对于数据库来说也是一个糟糕的选择,因为它缺乏企业级数据库的许多功能和 ado.net 支持。交易是最大的缺失特性,命名参数是第二个。

    如果您需要“更小”或免费的数据库解决方案,请查看 SqlExpress、SqlLite 或 Posgress。由于您当前的目标是 Access,因此其中任何一个都可以使用。

    【讨论】:

    • 是的,我使用访问权限的次数越多,我就越讨厌它。我必须在 SQL 中重做。
    • 真的吗?因为每当我阅读或看到对 Access 和 Ado.Net(或数据访问框架)的引用时,这些都是开发人员遇到的前两个问题。
    • @JasonMeckley 请参阅Create a transaction for ms-asccess in c# 了解交易。命名参数更加复杂。 QueryDefs 支持它们。它们不使用内联 SQL。您必须使用“?”。我不知道 SQLLite 或 Progess 是否也支持,但我没有玩过。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多