Sqlite

sqlite 數據庫更改未立即送出

  • October 9, 2019

對於全域連接(表示未關閉的連接),對於隱式事務(開啟自動送出),插入查詢是否不立即送出?(有時最後插入的行在其他連接中不可讀取)。但適用於本地連接(意味著每次查詢執行後關閉的連接)

我附上了下面的vb程式碼

Imports System.Data.SQLite
Public Class Form1
   Public cnn As SQLiteConnection
   Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
       cnn = New SQLiteConnection("Data Source=\\abc\xx\x_backup.db;Password=password;Connect Timeout=55;FailIfMissing=True")
       cnn.ParseViaFramework = True
       cnn.Open()
   End Sub
Public Function inserttoTable(ByVal sql As String) As DataTable

        Try
           sql = "SELECT max(ID) FROM joblog;"
           Dim mycommand As SQLiteCommand = New SQLiteCommand(cnn)
           mycommand.CommandText = sql
           MsgBox(mycommand.ExecuteScalar)
           sql = "INSERT INTO joblog (jobid) VALUES (123);"

           mycommand = New SQLiteCommand(cnn)
           mycommand.CommandText = sql
           MsgBox(mycommand.ExecuteNonQuery())
       Catch ex As Exception
           MsgBox(ex.ToString)
       End Try

我認為CL。把釘子釘在棺材上……

據我所知-我不知道 SQLite 是否相同-某些數據庫系統提供“記憶體模式”-選擇結果作為臨時表保存在數據庫伺服器的記憶體中-您的應用程序僅獲得一個指針這些臨時表和一個所謂的“游標”最初指向所述表的第一個條目。要釋放使用過的臨時表,您必須為數據庫伺服器分配一個附加命令(db_free_result 或類似名稱)。通常,您在將臨時表提取到應用程序中的某種資料結構中之後執行此操作 - 無論是對象列表、集合還是數據集數組或類似的。只要您不釋放結果,一些數據庫就會拒絕您的下一個選擇請求。

您的症狀表明事務仍處於活動狀態。

當某些 SELECT 查詢尚未完成時會發生這種情況。(C API 具有搜尋活動命令的功能,但這在 C# 中不可用。)


另一個原因可能是您的網路文件系統有問題。

引用自:https://dba.stackexchange.com/questions/249902