0
我有一個代碼從選擇的SQL語句中創建一個數據表(在內存中)。然而,我意識到這個數據表在填寫過程中,而不是由於交易記錄的結果,它完成了這項工作,但它的速度很慢。我究竟做錯了什麼 ?SQLite事務填寫提交事務之前的表
Inalready.Clear() 'clears a dictionary
Using connection As New SQLite.SQLiteConnection(conectionString)
connection.Open()
Dim sqliteTran As SQLite.SQLiteTransaction = connection.BeginTransaction()
Try
oMainQueryR = "SELECT * FROM detailstable Where name= :name AND Breed= :Breed"
Dim cmdSQLite As SQLite.SQLiteCommand = connection.CreateCommand()
Dim oAdapter As New SQLite.SQLiteDataAdapter(cmdSQLite)
With cmdSQLite
.CommandType = CommandType.Text
.CommandText = oMainQueryR
.Parameters.Add(":name", SqlDbType.VarChar)
.Parameters.Add(":Breed", SqlDbType.VarChar)
End With
Dim c As Long = 0
For Each row As DataRow In list.Rows 'this is the list with 500 names
If Inalready.ContainsKey(row.Item("name")) Then
Else
c = c + 1
Form1.TextBox1.Text = " Fill .... " & c
Application.DoEvents()
Inalready.Add(row.Item("name"), row.Item("Breed"))
cmdSQLite.Parameters(":name").Value = row.Item("name")
cmdSQLite.Parameters(":Breed").Value = row.Item("Breed")
oAdapter.Fill(newdetailstable)
End If
Next
oAdapter.FillSchema(newdetailstable, SchemaType.Source)
Dim z = newdetailstable.Rows.Count
「在這一點上newdetailstable已經填滿了,我甚至還沒有提交的事務
' sqliteTran.Commit()
Catch ex As Exception
End Try
End Using
這太糟糕了,我不知道有關SQLite事務。如果整個批次不能成功,您需要傳統的回滾行爲來完成大量工作的大量用例。 – tcarvin
對不起,回滾工作得很好。 –
數據表是一個不是數據庫的vb.datatable,只是上面的代碼被忽略了事務,並且正在將每個循環作爲一個單獨的事務立即處理。無論如何,我來這裏刪除問題,因爲我使用了一個非常快速的不同解決方案。簡單地說,我使用插入事務將名稱保存到臨時表中,然後調用通過使用SQL語句返回所需信息的查詢。選擇* FROM DetailsTable WHERE DetailsTable.name IN(從TempIDs中選擇TempIDs.Names)它的速度很快並且解決了問題。感謝您花時間回答。 – user1500403