vb.net - .NET:不要让 SQLite 内存数据库工作
问题描述
为了了解内存中 SQLite 数据库的使用,我在 SQLite 文档中阅读了有关它的内容,并且(我认为)我在 stackoverflow 中可以找到的几乎所有内容。
我想将本地数据库中的表复制到内存数据库中。
为了了解 SQLite 内存数据库的工作原理,我创建了以下代码:
Private Sub Test()
Dim intTemp As Integer
Dim strSQL As String
Dim conn As New SQLiteConnection("Data Source=':memory:';Version=3;New=True;")
conn.Open()
strSQL = "CREATE TABLE Table_1 (Table_1ID [VARCHAR(5)] NOT NULL, Item [VARCHAR(40)]);"
Dim cmd As SQLiteCommand = New SQLiteCommand(strSQL) With {
.Connection = conn
}
strSQL = "SELECT Count(*) FROM Table_1;"
' Test (1): Result: 0
intTemp = cmd.ExecuteScalar
strSQL = "INSERT INTO Table_1 (Table_1ID, Item) VALUES ('1000', 'Book');"
cmd.CommandText = strSQL
' Test (2): Result: 1
intTemp = cmd.ExecuteNonQuery
strSQL = "SELECT Count(*) FROM Table_1;"
' Test (3): Result: 0
intTemp = cmd.ExecuteScalar
End Sub
它似乎以某种方式起作用:当我将记录插入表中时,结果为 1。但是当我计算记录时,结果为 0。
知道我在这里做错了什么吗?在 C# 或 VB.Net 中是否有任何工作示例?也许甚至可以解决我最初的问题:将表从本地数据库复制到内存数据库中?谢谢!
解决方案
在COUNT
sql中你忘记改了CommandText
,所以又插入了一条记录。
strSQL = "SELECT Count(*) FROM Table_1;"
cmd.CommandText = strSQL ' this was missing '
intTemp = CInt(cmd.ExecuteScalar()) ' Now this returns 1 '
出于这个原因,对不同的查询使用多个命令是个好主意。
旁注:您应该Using
对使用非托管资源的对象使用 -statement。在连接的情况下,即使在出现错误的情况下,它也会在处理之前关闭它:
Using conn = New SQLiteConnection("Data Source=':memory:';Version=3;New=True;")
conn.Open()
Using cmd = New SQLiteCommand("CREATE TABLE Table_1 (Table_1ID [VARCHAR(5)] NOT NULL, Item [VARCHAR(40)]);", conn)
cmd.ExecuteNonQuery()
cmd.CommandText = "INSERT INTO Table_1 (Table_1ID, Item) VALUES ('1000', 'Book');"
Dim inserted as Int32 = cmd.ExecuteNonQuery()
cmd.CommandText = "SELECT Count(*) FROM Table_1;"
Dim count = CInt(cmd.ExecuteScalar())
End Using
End Using
推荐阅读
- angular - 带有查询参数的字符串插值
- java - 将排序集的最后 n 个元素添加到另一个
- python - 使用 date_time 对 pandas 进行 rows_manipulation,数据时间为 0-30 小时
- r - 如何使用 R 的 purrr::map 将多个 csv 文件保存在不同的文件夹中
- javascript - 如何将我的输入范围值设置为图像序列帧增量号。在javascript中?
- osgi - CLI 属性从 Boolean 更改为 String
- bash - 如何打印 git repo 中每个子文件夹的最新提交时间?
- wordpress - 如何删除 .htaccess 中的重定向
- typescript - 如何从计算属性名称的函数参数中获取文字类型?
- firebase - 使用firebase使用电话号码进行登录身份验证