2017-01-20 2 views
0

Я использую тот же SQL-запрос в SQLiteStudio 3.1.0, и он работает без проблем с использованием того же параметра, который я передаю. Когда я использую тот же SQL и использую код ниже в своем VB project он возвращает 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

Ваше заявление, хотя оно еще не завершено. 'Выберите данные из таблицы, где Option =' как 'Обязательно, чтобы мы .' ;; Посмотрите на этот вопрос: http://stackoverflow.com/questions/809246/adding-parameters-in-sqlite-with-c- sharp – TyCobb

ответ

0

В результате это поле базы данных было неправильным. Предполагалось, что это VarChar (200), но вместо этого это было числовое (200). Поэтому, если вы получаете проблемы с неправильными данными, возвращаемыми, вы должны посмотреть на таблицу. Что-то, что я узнал из SQLite, это возврат vbCr, поэтому вы должны добавить .ToString(). Замените (vbCr, String.Empty) на ExecuteScalar().

Смежные вопросы