Как размещать данные в dataGridView1 с использованием PostgreSQL в качестве базы данных и vb.net формы Windows

#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()) Зачем преобразовывать целое число в строку, а затем обратно в целое число?