【问题标题】:SQLite Insert Into command not working---no error in VB.NETSQLite Insert Into 命令不起作用---在 VB.NET 中没有错误
【发布时间】:2017-02-10 13:13:45
【问题描述】:

这是调用 InsertInto Sub 和 InsertInto Sub 本身的代码行。基本的东西,应该没有问题,但它没有。它通过,没有错误并执行命令,但该行永远不会添加到表中。我还有一个我写的批量插入,它之前已经将许多行数据插入到我知道有效并且也尝试过但仍然没有运气的表中。

SQLite 需要将行插入到表中吗?我检查了 SQLite 文档,并且 INSERT INTO 语句与他们在其网站上显示的完全一样。不确定还能做什么,因为如果我在那里尝试插入,则插入在 tempDT 表中本地工作。我的意思是我可以加载表,删除它,然后在插入行后创建一个新表,但我不应该做所有这些。这是一个简单的基本命令,它应该可以工作......在有人说尝试在没有字符串的 $ 实现的情况下正常写出它之前,我已经尝试了几种不同的方法,包括“正常”的方法和帽子没有也没有用。我也没有使用变量作为数据,只是使用一个单词硬编码的字符串作为值,这也不起作用。

SQLTables.InsertInto(MyDB, "SaveGames", $"INSERT INTO SaveGames(FileName,SaveGameJSONString) VALUES ('{fileName}', '{model}')")


Public Sub InsertInto(dbName As String, tableName As String, SQLCmd As String, Optional ByVal myFilePath As String = "")
        Dim Conn As New SQLiteConnection()
        GetConnectionString(dbName, Conn, myFilePath)
        Using Conn
            Dim SQL As String = SQLCmd
            Dim Cmd As New SQLiteCommand(SQL, Conn)
            Cmd.ExecuteNonQuery()
        End Using
    End Sub

【问题讨论】:

  • MyDB 的当前值是多少,为什么 myFilePath 是空白的?
  • 不需要打开连接吗?
  • 哈哈....好点的错误............
  • 这不是实现Using的正确方法
  • myDB 的当前值是“Football”并且 FilePath 是空白的,因为它在默认目录中......也就是说,如果由于某种原因我必须为 DB 设置不同目录的路径。连接字符串的工作已经差不多一年了,我已经用它在表上加载、创建和完成了大量的批量插入,只是没有完成任何单一的插入......

标签: vb.net sqlite insert


【解决方案1】:

我不知道您的 GetConnectionString 方法实际上做了什么,但它应该返回一个连接字符串,您将其传递给 SQLiteConnection 类的构造函数。

那么以下应该可以工作:

Public Sub InsertInto(dbName As String, tableName As String, SQLCmd As String, Optional ByVal myFilePath As String = "")
    Dim Conn As New SQLiteConnection(GetConnectionString(dbName, myFilePath))
    Conn.Open()
    Dim Cmd As New SQLiteCommand(Sql, Conn)
    Cmd.ExecuteNonQuery()
    Conn.Close()
End Sub

打开连接后,您应该能够像这样执行查询:

Dim Cmd As New SQLiteCommand(SQLCmd, Conn)
Cmd.ExecuteNonQuery()

【讨论】:

  • 我会尝试在插入中执行连接字符串而不是调用函数...如果这是问题,那肯定会很奇怪,因为我使用了相同的连接字符串函数来加载(使用它可以很好地加载表),为它创建并进行批量插入已经将近一年了,只是从未尝试过进行单个插入...
【解决方案2】:

忘记了我必须创建一个事务,然后在 SQLite 中提交该事务才能真正保存到数据库中...否则它只会将更改保留在本地,当您关闭程序时它们会消失...现在按预期工作.

 Using **transaction = Conn.BeginTransaction()**
            Dim Cmd As New SQLiteCommand(SQLCmd, Conn)
            Cmd.ExecuteNonQuery()
            **transaction.Commit()**
            Conn.Close()
        End Using

编辑:这有效,但不需要我发现......我在看到数据库中的值之后意识到,然后一旦我再次运行程序就消失了,它正在写入 bin/Debug 目录和每次我运行程序时它都会覆盖它。所以我现在将它指向正确的目录,它可以与我的初始代码一样工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-16
    • 2020-09-02
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多