0

我试图将数据插入到我之前在 vb.net 中创建的 sqlite 数据库中:

    Using objConn As New SQLiteConnection(/my path to file is here/)

        Using objCommand As SQLiteCommand = objConn.CreateCommand()

            objConn.Open()

            objCommand.CommandText = "INSERT INTO users (username , password ) VALUES ( " + usernamevar + ",  " + passwordvar + " )"

            objCommand.ExecuteNonQuery()

            MessageBox.Show("User created successfully")

        End Using

    End Using

Usernamevar 和 passwordvar 是我传递给上面 sub 的值。

但是,我收到一条错误消息:

System.Data.SQLite.SQLiteException:'SQLite 错误没有这样的列:aa'

“aa”是在变量 Usernamevar 下传递的字符串。

我意识到我在插入短语的某处一定有语法错误,因为我可以成功地将字符串或数字插入数据库,但是我想插入变量。有谁知道如何修理它?谢谢。

4

1 回答 1

1

您可以在 2 个字符串变量周围添加单引号,或者您可以学习使用参数来避免这些细节并保护您的数据库。

objCommand.CommandText = "INSERT INTO users (username , password ) VALUES ( '" + UserNameVar + "',  '" + Passwordvar + "' )"

更简单更好的方法

Private Sub InsertUser(UserNameVar As String, Passwordvar As String)
    Using objConn As New SQLiteConnection("My path To file Is here")
        Using objCommand As SQLiteCommand = objConn.CreateCommand()
            objCommand.CommandText = "INSERT INTO users (username , password ) VALUES (@UserName @Password);"
            objCommand.Parameters.Add("@UserName", DbType.String).Value = UserNameVar
            objCommand.Parameters.Add("@Password", DbType.String).Value = Passwordvar
            objConn.Open()
            objCommand.ExecuteNonQuery()
            MessageBox.Show("User created successfully")
        End Using
    End Using
End Sub

我不敢相信我正在提供和回答,.AddWithValue但我似乎找不到可以将数据类型添加到方法中的替代方法。我猜想 SQLite 中类型的广泛实现使它有些无关紧要。

编辑 更改为 .Add 方法,该方法允许我提供数据类型。感谢@WelcomeOverflow 给我指路。

于 2018-12-09T21:52:06.157 回答