2017-01-20 150 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()。