最佳解答者
同時有兩個資料表都新增一筆記錄,這樣用對嗎?

問題
-
SQLServer 2005 express + ASP.Net 2.0 + .Net framework 2.0
狀況是這樣的:
假設有 A, B 二個資料表,它們的資料某些東西必須一致
因此假設 A 資料表在 INSERT 時發生錯誤,則除了 RollBack 本身以外,還需 RollBack B資料表,
若 B 資料表在 INSERT 時發生錯誤亦然。
那麼以下是我的程式碼片段,不知道這樣對不對: (因為有發生點小問題,怪怪的)
Code Snippet10 Dim conn As New SqlConnection(.....)
10 conn.Open()
11 Dim cmd As New SqlCommand("", conn, conn.BeginTransaction(IsolationLevel.Snapshot))
12
13 cmd.CommandText = "新增 A 資料表的 Sql 字串"
14 Try
15 cmd.ExecuteNonQuery()
16 Catch ex As Exception
17 cmd.Transaction.Rollback() ← 實際程式碼中有 Try Rollback
18 conn.Close()19 Exit Function
20 End Try21
22 cmd.CommandText = "新增 B 資料表的 Sql 字串"
23 Try
24 cmd.ExecuteNonQuery()
25 Catch ex As Exception
26 cmd.Transaction.Rollback() ← 實際程式碼中有 Try Rollback
27 conn.Close()28 Exit Function
29 End Try
3031 cmd.Transaction.Commit()
以下是我的測試
我故意在新增 A 資料表時隨意指定一個與原有資料一樣的 PK 欄位的值,造成 PK 資料重複的錯誤,然後執行。之後我去查詢資料庫的內容,並無任何資料被新增,這是對的。
但我用相同的方法也在新增 B 資料表的地方故意製造 PK 值重複的錯誤(這次 A 的地方不製造錯誤),經過反覆多次的測試結果為 B 資料表試完全不會有新增的資料門錯,但是 A 資料表確有時候會有新增資料,有時候不會;我也觀察不出來是什麼情形下會有,什麼情形下沒有,就一直怪怪的。不是在 Commit() 之前都不會有任何資料寫入的嗎??
是我 ADO 的用法錯了嗎?
若這樣用法不對,那如何才是正確的呢?
謝謝喔~
解答
所有回覆
-
好說 寫信: 你Insert 2個Table 直接寫在同一個交易的SQL Command 裡不就好了. 您指的「同一個交易的 SQL Command」意思是說同一個 SQL Command 就能一次 INSERT 二個 Table 嗎?
可是我上網及上書局找了很久,都只見多資料表查詢(SELECT)的語法,找不到多資料表的新增(INSERT)耶。
我原本就有在想查詢時可以
「SELECT * FROM Table1, Table2...」
那新增時不曉得有沒有像
「INSERT INTO Table1(Field1,Filed2...),
Table2(Field1,Filed2...)...
VALUES(val1,val2...)」
之類的語法,
可是似乎沒有這樣的語法耶.....
您說的是這個意思嗎?
.