Лучший способ вставить данные в несколько таблиц в доступе? - PullRequest
1 голос
/ 07 января 2012

Хорошо, вот моя база данных:

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

У меня есть страница в форме .net, которая позволяет пользователям вставлять тренировку и связанные с ней мускулы в доступбаза данных.

Как только я вставляю запись в таблицу WorkOuts, как мне вставить соответствующие мышцы в таблицу MuscleGroup, не выбрав максимальный идентификатор тренировки, которая была только что вставлена?Я хочу вставить все вместе, одновременно.Надеюсь, мой вопрос имеет смысл, я думаю, что это общая проблема с базой данных, но я пока не нашел решения.

Ответы [ 2 ]

3 голосов
/ 07 января 2012

Хотя я согласен с тем, что вам следует рассмотреть возможность использования альтернативных RDBM, вы можете использовать следующий код (предполагается, что вы используете OLEDB и C #) для получения правильного AutoNumber, сгенерированного оператором вставки 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();
0 голосов
/ 07 января 2012

да, это очень часто, но для этого потребуется минимум 3 запроса, если не больше, так как это доступ.

  1. для вставки записи
  2. для получения идентификатора
  3. по одному для каждой группы мышц (вы могли бы комбинировать их, но я сомневаюсь в этом)

Доступ также является плохим выбором для базы данных, поскольку в нем отсутствуют многие функции баз данных уровня предприятия и поддержка ado.net. Транзакции являются самой большой отсутствующей функцией, а именованные параметры - вторыми.

Если вам нужно «меньшее» или бесплатное решение для базы данных, проверьте SqlExpress, SqLite или Posgress. Любой из них будет работать, так как вы в настоящее время ориентируетесь на Access.

...