Я написал форму 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
Кто-нибудь может мне с этим помочь? Извините за неточности в характеристиках, я новичок. Заранее спасибо!
LIKE
не работает с числами. Он работает только с символьными значениями. Так чтоcustomer_id LIKE ...
иbalance LIKE
неверны (и, честно говоря, не имеют для меня большого смысла) - person a_horse_with_no_name   schedule 14.06.2016