【问题标题】:Enabling Foreign Key Support for SQlite on VB Net在 VB Net 上启用对 SQlite 的外键支持
【发布时间】:2016-08-19 03:30:36
【问题描述】:

按照本教程 http://www.sqlite.org/foreignkeys.html 我需要一个包含 3 个表的数据库,但是我无法修复有关“SQL 逻辑错误....靠近外国”的消息

Private Sub CreateDataBase()

    Dim conn = New SQLiteConnection("Data Source=MyDataBase.sqlite;Version=3")

    Try
        Using (conn)
            conn.Open()


            '3 Tables I need to create
            Dim mainTable = "CREATE TABLE IF NOT EXISTS users (userID INTEGER PRIMARY KEY, name VARCHAR(20))"
            Dim tableA = "CREATE TABLE IF NOT EXISTS tableA (ItemA VARCHAR(20), user INTEGER) FOREIGN KEY(user) REFERENCES users (userID)"
            Dim tableB = "CREATE TABLE IF NOT EXISTS tableB (ItemB VARCHAR(20), user INTEGER) FOREIGN KEY(user) REFERENCES users (userID)"

            Dim cmdConexion As SQLiteCommand = New SQLiteCommand(mainTable, conn)


    'Try for the mainTable
            Try
                cmdConexion.ExecuteNonQuery()
            Catch ex As Exception
                MsgBox(ex.ToString())
            End Try


    'Set and Try for tableA
            cmdConexion.CommandText = tableA
            Try
                cmdConexion.ExecuteNonQuery()
            Catch ex As Exception
                MsgBox(ex.ToString())
            End Try


    'Set and Try for tableB
            cmdConexion.CommandText = tableB

            Try
                cmdConexion.ExecuteNonQuery()
                Catch ex As Exception
                MsgBox(ex.ToString())
            End Try

        End Using

    Catch ex As Exception
        MsgBox(ex.ToString())
    End Try

End Sub

相同的代码仅适用于 mainTable。

我试过这样的一行

Pragma("foreign_keys") = 1

甚至

cmdConexion.CommandText = "PRAGMA foreign_keys = ON"

但我仍然无法修复错误。

SQL 行或 Pragma on 的错误在哪里?

注意: 另外,是否有另一种方法可以在同一个 Try - Catch 上执行 SQL Create Table,或者更好地为每个表执行一个 Try - Catch?

【问题讨论】:

    标签: vb.net sqlite


    【解决方案1】:

    您在 CREATE TABLE 语句中有语法错误。 FOREIGN KEY-part 必须在括号内

    CREATE TABLE IF NOT EXISTS tableA (
        ItemA VARCHAR(20),
        user INTEGER,
        FOREIGN KEY(user) REFERENCES users (userID)
    )
    

    或者干脆

    CREATE TABLE IF NOT EXISTS tableA (
        ItemA VARCHAR(20),
        user INTEGER REFERENCES users (userID)
    )
    

    注意:像“...靠近某物”这样的错误通常只是语法错误。

    【讨论】:

    • 对!!两种解决方案都有效!我的错误是一个“)”不合适。感谢其他提示
    猜你喜欢
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    相关资源
    最近更新 更多