Mysql ODBC Select команда с параметром - не работает

0

Пожалуйста, кто-нибудь может объяснить, почему этот код не работает? Подключение к mysql осуществляется через драйвер mysql odbc (последний). Параметр в команде выбора не распознан.

Я также попытался заменить @param1 в команде выбора:

Select product_id from product where model = ?

код все еще не работает.

Sub Main()

    Dim DBCONT As New Odbc.OdbcConnection
    Dim strConn As String = "DSN=MyDSN"
    DBCONT.ConnectionString = strConn
    DBCONT.Open()

    Dim cmd As New Odbc.OdbcCommand
    With cmd
        .CommandText = "SELECT product_id FROM products WHERE model = @param"
        .Connection = DBCONT
    End With

    Dim param1 As Odbc.OdbcParameter
    param1 = cmd.CreateParameter()
    With param1
        .ParameterName = "@param"
        .OdbcType = Odbc.OdbcType.VarChar
        .Size = 30
        .Value = "TESTVALUE"
    End With


    Dim reader As Odbc.OdbcDataReader
    reader = cmd.ExecuteReader

    Console.WriteLine(cmd.CommandText.ToString)
    'this line displays "Select product_id from products where model = @param"
    'instead of  "Select product_id from products where model = "TESTVALUE"..
    'WHY??

    While reader.Read
        Console.WriteLine(reader(0))
        Console.WriteLine()
    End While
    Console.ReadLine()

    DBCONT.Close()
    reader = Nothing
    cmd = Nothing

End Sub
  • 0
    Я не думаю, что MySQL поддерживает использование «@» в качестве префикса параметра, кроме как через Connector / Net. Я не очень часто его использую, поэтому могу ошибаться, но я думаю, что стандартом для MySQL является префикс имени параметра с двоеточием в коде SQL, а затем пропускаем его при установке имени параметра.
  • 0
    Существует собственный поставщик MySql, доступный в виде пакета Nuget. Забудьте ODBC и установите Nuget. Затем ссылка MySql.Data.MySqlClient. У этого провайдера нет проблем с параметрами, начинающимися с @.
Теги:

3 ответа

-1
Лучший ответ

Спасибо за вашу помощь. Этот код уже работает:

Sub Main()

Dim DBCONT As New Odbc.OdbcConnection
Dim strConn As String = "DSN=MyDSN"
DBCONT.ConnectionString = strConn
DBCONT.Open()

Dim cmd As New Odbc.OdbcCommand
With cmd
    .CommandText = "SELECT product_id FROM products WHERE model LIKE ?"
    //it seems it is important to add paramater right after commandtext
    .Parameters.Add("@param", OdbcType.VarChar).Value = "%" + "TESTVALUE" + "%"
    .Connection = DBCONT
End With

Dim reader As Odbc.OdbcDataReader
reader = cmd.ExecuteReader
Console.WriteLine(cmd.CommandText.ToString)
//it should display SELECT product_id FROM products WHERE model LIKE ?
While reader.Read
    Console.WriteLine(reader(0))
    Console.WriteLine()
End While
Console.ReadLine()

DBCONT.Close()
reader = Nothing
cmd = Nothing

End Sub
0

Я не уверен на 100%, но я все равно опубликую это как ответ, потому что я думаю, что это правильно:

Dim cmd As New Odbc.OdbcCommand
With cmd
    .CommandText = "SELECT product_id FROM products WHERE model = :param"
    .Connection = DBCONT
End With

Dim param1 As Odbc.OdbcParameter
param1 = cmd.CreateParameter()
With param1
    .ParameterName = "param"
    .OdbcType = Odbc.OdbcType.VarChar
    .Size = 30
    .Value = "TESTVALUE"
End With
  • 0
    Это показывает ошибку mysql 42000 в тексте команды "рядом с: param"
  • 0
    cmd.Prepare() , вы пробовали это? Также я думаю, что вы используете ? в месте, где идут параметры.
Показать ещё 4 комментария
0

Где это говорит:

".CommandText = "SELECT product_id FROM products WHERE model = @param"

Измените это на:

".CommandText = "SELECT product_id FROM products WHERE model = '@param'"

(Я поставил '' вокруг @param, имейте в виду, что это отличается от "", который окружает это)

  • 0
    Я попробовал это - без изменений.
  • 0
    Но если заключить его в одинарные кавычки, это будет буквальный текст, не так ли?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню