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

时间:2012-01-06 20:18:02

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

好的,这是我的数据库:

http://i488.photobucket.com/albums/rr245/lolwtf_album/database.jpg

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

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

2 个答案:

答案 0 :(得分:3)

虽然我同意您应该考虑使用备用RDBM,但您可以使用以下代码(假设您使用的是OLEDB和C#)来检索由MS-Access Insert语句生成的正确的自动编号:

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();

答案 1 :(得分:0)

是的,这是非常常见的,但是如果不是更多,则需要至少3个查询。

  1. 插入记录
  2. 检索ID
  3. 每个肌肉群一个(你可能能够将这些组合起来,但我对此表示怀疑)
  4. Access对于数据库来说也是一个糟糕的选择,因为它缺少许多功能企业级数据库和ado.net支持。交易是最大的缺失特征,命名参数是第二个。

    如果您需要“较小”或免费的数据库解决方案,请查看SqlExpress,SqLite或Posgress。由于您目前正在定位Access,因此其中任何一项都可以使用。