VB.NET с pgSQL: как изменить тип текстового поля в SQL-запросах?

Я написал форму VB в Visual Studio 2013 (.Net Framework 4.5.1), которая открывает и редактирует базу данных pgSQL. Чтобы пользователь мог выполнять поиск в таблице, я создал поле со списком, из которого пользователь может выбрать нужный столбец для поиска, а затем ввести значение, которое он ищет, в текстовое поле.

Чтобы интегрировать pgSQL с VS 2013, я использую программное обеспечение Devart dotConnect для PostgreSQL 7.6 Express (бесплатная версия).

Эта конкретная таблица имеет три столбца (идентификатор, имя, баланс). В pgSQL тип столбца для идентификатора — целочисленный, для имени — переменный символ, а для баланса — числовой.

Когда я тестирую поиск по имени, все работает нормально. Для двух других полей я, очевидно, пытался изменить тип текстового поля в SQL-запросе с помощью CType и CInt, но ничего не работает, и я получаю сообщение об ошибке:

оператор не существует: целое число ~ ~ неизвестно

Ниже мой код.

Private Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click

    'creating pgsql connection and query
    Dim myQuery As String
    Dim pgSqlConnection1 As PgSqlConnection = New PgSqlConnection()
    pgSqlConnection1.ConnectionString = "UserId=postgres;Password=***;Host=localhost;Database=postgres;Persist Security Info=True;Initial Schema=public"

    'searches according to selected column
    If ComboBox1.Text = "customer_name" Then
        myQuery = "SELECT customer_id, customer_name, balance FROM account_current WHERE customer_name LIKE '%" & TextBox1.Text & "%'"
        Search(myQuery, pgSqlConnection1)
    ElseIf ComboBox1.Text = "customer_id" Then
        myQuery = "SELECT customer_id, customer_name, balance FROM account_current WHERE customer_id LIKE '%" & CType(TextBox1.Text, Integer) & "%'"
        Search(myQuery, pgSqlConnection1)
    ElseIf ComboBox1.Text = "balance" Then
        myQuery = "SELECT customer_id, customer_name, balance FROM account_current WHERE balance LIKE '%" & CType(TextBox1.Text, Double) & "%'"
        Search(myQuery, pgSqlConnection1)
    End If

End Sub

Public Sub Search(myQuery As String, pgSqlConnection1 As PgSqlConnection)

    'Try statement to show error instead of crashing
    Try

        pgSqlConnection1.Open()
        Dim dt As New DataTable
        Dim MyCommand As New PgSqlCommand(myQuery, pgSqlConnection1)
        Dim myDataAdapter As New PgSqlDataAdapter(myQuery, pgSqlConnection1)
        myDataAdapter.Fill(dt)
        DataGridView1.DataSource = dt
        pgSqlConnection1.Close()

    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try

End Sub

Кто-нибудь может мне с этим помочь? Извините за неточности в характеристиках, я новичок. Заранее спасибо!


person H. D. Afentoulidis    schedule 14.06.2016    source источник
comment
LIKE не работает с числами. Он работает только с символьными значениями. Так что customer_id LIKE ... и balance LIKE неверны (и, честно говоря, не имеют для меня большого смысла)   -  person a_horse_with_no_name    schedule 14.06.2016


Ответы (1)


Используйте CAST в своем запросе, чтобы иметь возможность использовать LIKE с целым числом.

Пример:

myQuery = "SELECT customer_id, customer_name, balance FROM account_current WHERE CAST(customer_id AS TEXT) LIKE '%" & CType(TextBox1.Text, Integer) & "%'"

С целым числом вы также можете использовать МЕЖДУ, который позволит вам искать между двумя числами:

myQuery = "SELECT customer_id, customer_name, balance FROM account_current WHERE customer_id BETWEEN '%" & CType(TextBox1.Text, Integer) & "%' AND '%" & CType(TextBox1.Text, Integer) & "%'"

Кроме того, если вы только начинаете, взгляните на npgsql, который является соединителем Postgres .NET: http://www.npgsql.org/

person Daniel Gee    schedule 14.06.2016