2012-01-06 104 views
1

好了,所以這是我的數據庫:在訪問中將數據插入多個表的最佳方法是什麼?

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

我有我的NET的形式,它允許用戶插入該鍛鍊鍛鍊和相關肌肉到Access數據庫的頁面。

一旦我向WorkOuts表中插入記錄,如何將相關肌肉插入MuscleGroup表中,而不必選擇剛插入的鍛鍊的最大ID?我想同時插入所有內容。希望我的問題有道理,我認爲這是一個常見的數據庫問題,但我還沒有找到解決方案。

回答

3

雖然我同意你應該考慮使用替代RDBM'S,可以使用下面的代碼(假設你正在使用OLEDB和C#)來檢索的MS-訪問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(); 
+0

我不知道訪問有這個功能。這很好理解! – broke 2012-01-06 21:17:45

+0

很酷。此代碼適用於Web應用程序,但也可以與WinForms或WPF一起使用。請注意,這種技術也可以用於ADO和DAO。 – 2012-01-06 21:35:25

0

是的,這是非常普遍的,但它至少需要3個查詢,如果不是更多,因爲它是訪問。

  1. 插入記錄
  2. 檢索ID
  3. 爲每個肌肉羣(你可能能夠結合這些,但我懷疑它)

訪問也因爲它缺少許多功能企業級數據庫和ado.net支持,所以它是數據庫的糟糕選擇。事務是最大的缺失功能,命名參數是第二個。

如果您需要「更小」或免費的數據庫解決方案,請查看SqlExpress,SqLite或Posgress。由於您目前正針對Access,因此這些功能都可以使用。

+0

是的,我越使用接入,越是討厭它。我將不得不在SQL中重做這個。 – broke 2012-01-06 20:51:35

+1

-1 Access支持事務和命名參數。 – 2012-01-06 21:00:43

+0

真的嗎?因爲任何時候我已經閱讀或看到對Access和Ado.Net(或數據訪問框架)的引用,這些是開發者遇到的前兩個問題。 – 2012-01-06 21:43:21

相關問題