1

我在这段代码中遇到了一个完全让我困惑的错误,感谢任何帮助、想法和建议。

我有以下代码:

   Sub addauthorsearch(ByVal objconn As SQLiteConnection, ByVal author As String, ByVal searchname As String)
        Dim myTrans As SQLiteTransaction
        Dim objCommand As SQLiteCommand
        Dim authorid As Integer
        myTrans = objconn.BeginTransaction
<< snipped  authorid is retrieved in here>>
       objCommand = objconn.CreateCommand()
        'objCommand.CommandText = "INSERT INTO [authorsearch] ([searchid],[authorid] ) VALUES ('" & searchname & "', '" & authorid  & "');"
        objCommand.CommandText = "INSERT INTO [authorsearch] ([searchid],[authorid] ) VALUES (@name, @id);"
        objCommand.Parameters.Clear()
        objCommand.Parameters.Add(New SQLiteParameter("@name", searchname))  ' * error occurs here
        objCommand.Parameters.Add(New SQLiteParameter("@id", authorid))

        Try
            objCommand.ExecuteNonQuery()
        Catch ex As InvalidOperationException
            MessageBox.Show("An error has occurred: " & ex.Message)
        Catch ex As SQLiteException
            MessageBox.Show("An error has occurred: " & ex.Message)

        End Try
        myTrans.Commit()

数据库被定义(在创建中)为

CREATE TABLE authorsearch 
    (searchid VARCHAR (150) NOT NULL UNIQUE, 
     authorid INTEGER REFERENCES author (authorid))

返回的错误是一个InvalidCastException,特别是从字符串“a-itmatov, chingiz”到类型Integer的转换无效。 searchID被定义为vchar,我认为没有任何理由应该尝试将其转换为整数。非参数化语句有效,但是由于显而易见的原因,它在包含单引号的名称(例如 O'Neil)上失败。

任何建议,将不胜感激。

在一个相关的问题上,显然翻译 C# 代码会有所帮助,并且有几个讨论 sqlite 和 c# 的论坛,有没有人知道 VB.NET 和 sqlite 有一个区域的论坛。

4

0 回答 0