#vb.net #postgresql
#vb.net #postgresql
Вопрос:
Я новичок в vb.net , и я надеюсь, что вы, ребята, сможете мне помочь в этом, я столкнулся с этой ошибкой «Произошла ошибка: 42601: синтаксическая ошибка в или рядом с «НРАВИТСЯ».я что-то пропустил в своем коде? почему я получаю эту ошибку? Я просто хочу, чтобы это отображало мои данные записи в моем dataGridView1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
LoadData()
End Sub
Private Sub LoadData(Optional keyword As String = "")
SQL = "SELECT id, dateSubmitted, lastname, firstname, middleInitial, bodyTemperature, employee_number, address, email, inputdate, inputBy, modifyDate, modifyBy, status, fmCustomerID_id, fmCustomerLocationID_id, fmCustomerSectionID_id, contact_number
FROM TracingApp_fmcustomeremployeesupplier" amp; "WHERE CONCAT(lastname, firstname) LIKE @keyword::varchar OR TRIM (middleInitial) LIKE @keyword::varchar ORDER BY id ASC"
Dim strKeyword As String = String.Format("%(0)%", keyword)
Cmd = New NpgsqlCommand(SQL, Con)
Cmd.Parameters.Clear()
Cmd.Parameters.AddWithValue("keyword", strKeyword)
Dim dt As DataTable = PerformCRUD(Cmd)
If dt.Rows.Count > 0 Then
intRow = Convert.ToInt32(dt.Rows.Count.ToString())
Else
intRow = 0
End If
StatusStrip1.Text = "Number of Entry(s): " amp; intRow.ToString()
With DataGridView1
.MultiSelect = False
.SelectionMode = DataGridViewSelectionMode.FullRowSelect
.AutoGenerateColumns = True
.DataSource = dt
.Columns(0).HeaderText = "ID"
.Columns(1).HeaderText = "dateSubmitted"
.Columns(2).HeaderText = "lastname"
.Columns(3).HeaderText = "firstname"
.Columns(4).HeaderText = "middleInitial"
.Columns(5).HeaderText = "bodyTemperature"
.Columns(6).HeaderText = "employee_number"
.Columns(7).HeaderText = "address"
.Columns(8).HeaderText = "email"
.Columns(9).HeaderText = "inputdate"
.Columns(10).HeaderText = "inputBy"
.Columns(11).HeaderText = "modifyDate"
.Columns(12).HeaderText = "modifyBy"
.Columns(13).HeaderText = "status"
.Columns(14).HeaderText = "fmCustomerID_id"
.Columns(15).HeaderText = "fmCustomerLocationID_id"
.Columns(16).HeaderText = "fmCustomerSectionID_id"
.Columns(17).HeaderText = "contact_number"
.Columns(0).Width = 20
.Columns(1).Width = 150
.Columns(2).Width = 150
.Columns(3).Width = 150
.Columns(4).Width = 150
.Columns(5).Width = 50
.Columns(6).Width = 150
.Columns(7).Width = 150
.Columns(8).Width = 150
.Columns(9).Width = 100
.Columns(10).Width = 100
.Columns(11).Width = 100
.Columns(12).Width = 100
.Columns(13).Width = 100
.Columns(14).Width = 100
.Columns(15).Width = 100
.Columns(16).Width = 100
.Columns(17).Width = 100
End With
End Sub
PostgreSQL.vb (модуль)
Option Explicit On
Option Strict On
Imports Npgsql
Module PostgreSQL
Public Function GetConnectionString() As String
Dim host As String = "Host=localhost;"
Dim port As String = "Port=5432;"
Dim db As String = "Database=tracer;"
Dim user As String = "Username=****;"
Dim pass As String = "Password=****;"
Dim conString As String = String.Format("{0}{1}{2}{3}{4}", host, port, db, user, pass)
Return conString
End Function
Public Con As New NpgsqlConnection(GetConnectionString())
Public Cmd As NpgsqlCommand
Public SQL As String = ""
Public Function PerformCRUD(Com As NpgsqlCommand) As DataTable
Dim da As NpgsqlDataAdapter
Dim dt As New DataTable()
Try
da = New NpgsqlDataAdapter
da.SelectCommand = Com
da.Fill(dt)
Return dt
Catch ex As Exception
MessageBox.Show("An error occured: " amp; ex.Message, "Database",
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
Return dt
End Function
End Module
это моя база данных
Комментарии:
1.Я думаю, что перед словом должен быть пробел
WHERE
TracingApp_fmcustomeremployeesupplier" amp; "WHERE
2. Думаю, Джейв прав, но в чем смысл конкатинации строк в любом случае? Почему бы просто не отслеживать app_fmcustomeremployeesupplier, ГДЕ CONCAT ….
3. По-видимому, вы полностью проигнорировали совет, который я дал вам в мае, отвечая на ваш предыдущий вопрос. Многие объекты базы данных используют неуправляемый код. Типы предоставляют
.Dispose
метод, который необходимо вызвать, чтобы освободить эти неуправляемые ресурсы.Using...End Using
блоки выполняют это за вас в Ado.net .4. Ваша функция PerformCRUD будет выполнять только чтение, а не другие операции в CRUD.
5.
intRow = Convert.ToInt32(dt.Rows.Count.ToString())
Зачем преобразовывать целое число в строку, а затем обратно в целое число?