BassamKassem Ответов: 1

У меня есть проблема с получением результатов из базы данных SQL для двух дат в datepicker


У меня есть проблема с получением результатов из базы данных SQL для двух дат в DatePicker .. отмечая, что я использую SQL Server на локальной машине, и поле, которое я ссылаюсь на его тип данных в SQL Server, является "datetime2(0)"

Я пробовал это все еще дает мне эту ошибку "неправильный синтаксис рядом с '?'."

Dim ds As DataSet = New DataSet
'da = New SqlDataAdapter(sqlQRY, cnnOLEDB)

Const sqlQRY As String = "Select * From Customers WHERE DateAdded >= ?"
Dim da As New SqlDataAdapter(sqlQRY, cnnOLEDB)
da.SelectCommand.Parameters.AddWithValue("@p0", Today)


Что я уже пробовал:

Private Sub CMD_Go_Date_Click(sender As Object, e As EventArgs) Handles CMD_Go_Date.Click
        Try
            Dim sqlQRY As String
            sqlQRY = "Select * From Customers WHERE DateAdded Between #" + Pick_DateFrom.Value + "# And #" + Pick_DateTo.Value + "#"
            Dim da As SqlDataAdapter
            Dim ds As DataSet = New DataSet
            da = New SqlDataAdapter(sqlQRY, cnnOLEDB)
            Dim cb As SqlCommandBuilder = New SqlCommandBuilder(da)
            da.Fill(ds, "Customers")
            DataGridViewCustomer.DataSource = ds
            DataGridViewCustomer.DataMember = "Customers"
            lbl_RowCount.Text = DataGridViewCustomer.RowCount
            Dim row As Integer
            If DataGridViewCustomer.RowCount > 0 Then
                row = DataGridViewCustomer.FirstDisplayedCell.RowIndex
                DataGridViewCustomer.Rows(row).Selected = True
                DataGridViewCustomer.Sort(DataGridViewCustomer.Columns(6), ListSortDirection.Ascending)
                If RowIndex_Cust_TXT.Text = vbNullString Then
                    Exit Sub
                Else
                    Me.DataGridViewCustomer.ClearSelection()
                    Me.DataGridViewCustomer.Rows(RowIndex_Cust_TXT.Text).Selected = True
                    Me.DataGridViewCustomer.FirstDisplayedScrollingRowIndex = RowIndex_Cust_TXT.Text
                End If
            Else
                row = 0
            End If
        Catch ex As SqlException
            MessageBox.Show(ex.Message)
        End Try
    End Sub

1 Ответов

Рейтинг:
9

Dave Kreskowiak

Вы используете запрос доступа с SQL Server. Очевидно, что это не работает. Кроме того, никогда не используйте конкатенацию строк для построения SQL-запроса. Всегда используйте параметры.

В Access параметры обозначаются символом a ? и никакого имени. В SQL Server они называются параметрами, обозначаемыми символом a. @:

sqlQry = "SELECT <fieldList> FROM Customers WHERE DateAdded BETWEEN @StartDate AND @EndDate"
da.SelectCommand.Parameters.Add("@StartDate", Pick_DateFrom.Value);
da.SelectCommand.Parameters.Add("@EndDate", Pick_DateTo.Value);

Конечно, это предполагает, что вы проверили свои значения DatePicker, чтобы убедиться, что они действительны и находятся в правильном порядке.


BassamKassem

ваше решение работает, и я благодарю вас за вашу помощь, но последний вопрос или помощь, пожалуйста. как заставить мое решение работать на сетевом диске , который будет использоваться различными пользователями, перед миграцией моей базы данных из access в SQL я обычно указывал на файл mdb с помощью следующей команды "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & System.Environment.Текущей каталог &ампер; "\именем.МБР"

Dave Kreskowiak

SQL Server не является "файловым" ядром базы данных. Он не использует общий диск. Клиенты подключаются к базе данных, как правило, по протоколу TCP/IP.