我在这段代码中遇到了一个完全让我困惑的错误,感谢任何帮助、想法和建议。
我有以下代码:
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 有一个区域的论坛。