好了,所以這是我的數據庫:在訪問中將數據插入多個表的最佳方法是什麼?
我有我的NET的形式,它允許用戶插入該鍛鍊鍛鍊和相關肌肉到Access數據庫的頁面。
一旦我向WorkOuts表中插入記錄,如何將相關肌肉插入MuscleGroup表中,而不必選擇剛插入的鍛鍊的最大ID?我想同時插入所有內容。希望我的問題有道理,我認爲這是一個常見的數據庫問題,但我還沒有找到解決方案。
好了,所以這是我的數據庫:在訪問中將數據插入多個表的最佳方法是什麼?
我有我的NET的形式,它允許用戶插入該鍛鍊鍛鍊和相關肌肉到Access數據庫的頁面。
一旦我向WorkOuts表中插入記錄,如何將相關肌肉插入MuscleGroup表中,而不必選擇剛插入的鍛鍊的最大ID?我想同時插入所有內容。希望我的問題有道理,我認爲這是一個常見的數據庫問題,但我還沒有找到解決方案。
雖然我同意你應該考慮使用替代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();
是的,這是非常普遍的,但它至少需要3個查詢,如果不是更多,因爲它是訪問。
訪問也因爲它缺少許多功能企業級數據庫和ado.net支持,所以它是數據庫的糟糕選擇。事務是最大的缺失功能,命名參數是第二個。
如果您需要「更小」或免費的數據庫解決方案,請查看SqlExpress,SqLite或Posgress。由於您目前正針對Access,因此這些功能都可以使用。
是的,我越使用接入,越是討厭它。我將不得不在SQL中重做這個。 – broke 2012-01-06 20:51:35
-1 Access支持事務和命名參數。 – 2012-01-06 21:00:43
真的嗎?因爲任何時候我已經閱讀或看到對Access和Ado.Net(或數據訪問框架)的引用,這些是開發者遇到的前兩個問題。 – 2012-01-06 21:43:21
我不知道訪問有這個功能。這很好理解! – broke 2012-01-06 21:17:45
很酷。此代碼適用於Web應用程序,但也可以與WinForms或WPF一起使用。請注意,這種技術也可以用於ADO和DAO。 – 2012-01-06 21:35:25