2017-01-20 154 views
0

我在SQLiteStudio 3.1.0中使用了相同的SQL查询,它在使用我传入的相同参数时没有问题。当我使用相同的SQL并在我的VB中使用下面的代码时项目返回0而不是正确的值。返回0而不是实际值

Private Function GetData() As Object 
    Dim sql As String = "Select Data from Table where Option = ?" 
    Return FunctionObject(sql, New List(Of Object) From {"This is a Test"}) 
End Sub 

Public Function FunctionObject(ByVal sql As String, ByVal parameters As List(Of Object)) As Object 
    Using sqlconnection As New SQLiteConnection(ConnectionString) 
      sqlconnection.Open() 
      Using Cmd As New SQLiteCommand(sql, sqlconnection) 
       Dim par As SQLiteParameter 
       For Each parm As Object In parameters 
        par = Cmd.CreateParameter() 
        par.Value = parm 
        Cmd.Parameters.Add(par) 
       Next 
      FunctionObject = Cmd.ExecuteScalar() 
      End Using 
    End Using 
End Function 

我将对象列表传入参数的方法。连接字符串的工作原理是因为它使其他SQL查询工作。我有一组相同的使用OleDb的代码,它的构建方式与此完全相同,并且可以使用此相同的SQL语句。那么是否有我丢失的东西可以使行为不同于SQLite和OleDb连接和executeScalar,因为一个返回0,另一个返回正确的字符串?

+1

什么是'sqlQuery'?您从未完成对'sql'的查询。参数也看起来没有命名。 – TyCobb

+0

对不起,我没有在Cmd中的正确的变量。 sql正在寻找名称为SomeVariable的列数据。它通过了方法 –

+0

您的声明虽然仍然不完整。 '从表中选择数据,其中选项='就像''这是必须的我们'')看看这个问题:http://stackoverflow.com/questions/809246/adding-parameters-in-sqlite-with-c-锐利 – TyCobb

回答

0

它最终成为一个数据库字段错误。它被认为是一个VarChar(200),但它是一个数字(200)。因此,如果您遇到了返回错误数据的问题,那么您应该查看表本身。从SQLite学到的东西是它返回一个vbCr,所以你应该添加.ToString()。将(vbCr,String.Empty)替换为ExecuteScalar()。