Sqlite
sqlite 數據庫更改未立即送出
對於全域連接(表示未關閉的連接),對於隱式事務(開啟自動送出),插入查詢是否不立即送出?(有時最後插入的行在其他連接中不可讀取)。但適用於本地連接(意味著每次查詢執行後關閉的連接)
我附上了下面的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# 中不可用。)
另一個原因可能是您的網路文件系統有問題。