SQL и vb.net

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
bvv70
Обычный пользователь
Обычный пользователь
 
Сообщения: 55
Зарегистрирован: 22.04.2006 (Сб) 19:12

SQL и vb.net

Сообщение bvv70 » 13.09.2007 (Чт) 20:00

В VB6 прекрасно работал следующий запрос
Код: Выделить всё
"SELECT * FROM Opr WHERE [Дата] BETWEEN #" & Format(CDate("01.01.2007"), "mm\/dd\/yyyy") & "# AND #" & Format(CDate("31.03.2007"), "mm\/dd\/yyyy") & "#  ORDER BY [Дата]"

Т.е. сортировка происходит по периоду дат (1 квартал) и в порядке возрастания. А вот в vb.net запрос не работает. Как быть, что делать. SQL знаю плохо, вышеуказанный запрос мне помогли составить.

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Сообщение HandKot » 14.09.2007 (Пт) 8:18

база данных какая?

ЗЫЖ используйте параметрированный запрос, намного удобней
I Have Nine Lives You Have One Only
THINK!

bvv70
Обычный пользователь
Обычный пользователь
 
Сообщения: 55
Зарегистрирован: 22.04.2006 (Сб) 19:12

Сообщение bvv70 » 14.09.2007 (Пт) 19:19

База .mdb. Хотел привести код, но исходники на другом компе. Выражение "параметрированный запрос", к сожалению, мне ничего не говорит.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 14.09.2007 (Пт) 21:41

Это хорошо, что не говорит, потому что если бы говорило, надо было бы что-то делать...

Должен говорить параметрический, он же параметризированный. Его и ищи.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

bvv70
Обычный пользователь
Обычный пользователь
 
Сообщения: 55
Зарегистрирован: 22.04.2006 (Сб) 19:12

Сообщение bvv70 » 17.09.2007 (Пн) 19:47

Не получается у меня с налету, хотя статьи по параметрическим запросам нашел... Помогите составить следующий запрос: в период между двумя датами (берутся из текстбоксов) и в порядке возрастания. На всякий случай приведу способ подключения к базе.
Код: Выделить всё
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim ConString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\K_n_g.mdb"
        Dim ConSQL As String = "select * from opr"
        Dim Data As New DataSet
        Dim Adapter As New OleDb.OleDbDataAdapter(ConSQL, ConString)

        Adapter.Fill(Data, "opr")
        DataGridView1.DataSource = Data
        DataGridView1.DataMember = "opr"
End Sub

Напомню, что в VB6 работал следующий запрос:
Код: Выделить всё
"SELECT * FROM Opr WHERE [Дата] BETWEEN #" & Format(CDate("01.01.2007"), "mm\/dd\/yyyy") & "# AND #" & Format(CDate("31.03.2007"), "mm\/dd\/yyyy") & "#  ORDER BY [Дата]"

bvv70
Обычный пользователь
Обычный пользователь
 
Сообщения: 55
Зарегистрирован: 22.04.2006 (Сб) 19:12

Сообщение bvv70 » 19.09.2007 (Ср) 16:57

Помогите с запросом!

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Сообщение HandKot » 20.09.2007 (Чт) 11:20

я использовал такой интерфейс для работы с базой

Код: Выделить всё
Option Strict On
Option Explicit On

Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.SqlTypes
Imports Microsoft.VisualBasic

Namespace My.DataAccess

    Public Class DataLayer
        Implements IDisposable

        Private adtCommand As SqlDataAdapter     'sql data adapter
        Private cmdCommand As SqlCommand     'sql data adapter

        '----------------------------------------------------------------
        ' Sub New:
        '   Конструктор.
        '----------------------------------------------------------------
        Public Sub New()
            MyBase.New()
            '
            ' Создаем датаадаптер
            '
            adtCommand = New SqlDataAdapter
            '
            ' создаем команду
            '
            cmdCommand = New SqlCommand
            cmdCommand.Connection = New SqlConnection(ConnectionString)
        End Sub

        '----------------------------------------------------------------
        ' Sub Dispose:
        '     Особождаем все ресурсы.
        '----------------------------------------------------------------
        Public Sub Dispose() Implements IDisposable.Dispose
            Dispose(True)
            GC.SuppressFinalize(True) ' as a service to those who might inherit from us
        End Sub

        '----------------------------------------------------------------
        ' Sub Dispose:
        '     Освобождаем память, занятую переменными класса.
        '----------------------------------------------------------------
        Protected Overridable Sub Dispose(ByVal disposing As Boolean)
            If Not disposing Then
                Exit Sub ' we're being collected, so let the GC take care of this object
            End If

            If Not cmdCommand Is Nothing Then
                If Not cmdCommand.Connection Is Nothing Then
                    cmdCommand.Connection.Dispose()
                End If
                cmdCommand.Dispose()
            End If

            If Not adtCommand Is Nothing Then
                adtCommand.Dispose()
                adtCommand = Nothing
            End If
        End Sub

        '----------------------------------------------------------------
        ' Sub PopulateCommandParam:
        '     Параметры для запроса
        '----------------------------------------------------------------
        Private Sub PopulateCommandParam(ByVal arParams() As SqlParameter, ByVal cmd As SqlCommand)
            Dim i As Integer

            For i = LBound(arParams) To UBound(arParams)
                cmd.Parameters.Add(arParams(i))
            Next
        End Sub

        '----------------------------------------------------------------
        ' Sub PopulateOutputParam:
        '     Возвращает результаты запроса
        '----------------------------------------------------------------
        Private Sub PopulateOutputParam(ByVal arParams() As SqlParameter, ByVal cmd As SqlCommand)
            Dim i As Integer

            For i = LBound(arParams) To UBound(arParams)
                If arParams(i).Direction = ParameterDirection.Output Then
                    arParams(i).Value = cmd.Parameters(arParams(i).ParameterName).Value
                End If
            Next
        End Sub

        Public Sub ExecSP(ByVal _proc As String, _
            ByRef intReturnVal As Integer, _
            Optional ByRef arParams() As SqlParameter = Nothing, _
            Optional ByRef dsResult As DataSet = Nothing)

            Try
                cmdCommand.CommandType = CommandType.StoredProcedure
                cmdCommand.CommandText = _proc
                If Not (arParams Is Nothing) Then
                    PopulateCommandParam(arParams, cmdCommand)
                End If

                'выполняем команду
                cmdCommand.Connection.Open()
                If dsResult Is Nothing Then
                    intReturnVal = cmdCommand.ExecuteNonQuery
                Else
                    adtCommand.SelectCommand = cmdCommand
                    intReturnVal = adtCommand.Fill(dsResult)
                End If

                If Not (arParams Is Nothing) Then
                    PopulateOutputParam(arParams, cmdCommand)
                End If
            Finally
                If Not cmdCommand Is Nothing Then
                    If Not cmdCommand.Connection Is Nothing Then
                        cmdCommand.Connection.Dispose()
                    End If
                    cmdCommand.Dispose()
                End If
                adtCommand.Dispose()
            End Try

        End Sub


        Public Sub ExecSQL(ByVal _sql As String, _
            ByRef intReturnVal As Integer, _
            Optional ByRef dsResult As DataSet = Nothing)

            Try
                cmdCommand.CommandType = CommandType.Text
                cmdCommand.CommandText = _sql

                'выполняем команду
                If dsResult Is Nothing Then
                    intReturnVal = cmdCommand.ExecuteNonQuery
                Else
                    adtCommand.SelectCommand = cmdCommand
                    intReturnVal = adtCommand.Fill(dsResult)
                End If
            Finally
                If Not cmdCommand Is Nothing Then
                    If Not cmdCommand.Connection Is Nothing Then
                        cmdCommand.Connection.Dispose()
                    End If
                    cmdCommand.Dispose()
                End If
                adtCommand.Dispose()
            End Try

        End Sub

    End Class
End Namespace


а вызывал так
Код: Выделить всё
            Dim intReturnVal As Integer
            Dim arParams(0) As SqlParameter
            Dim ds As DataSet

            Try

                ds = New DataSet

                arParams(0) = New SqlParameter("@id", SqlDbType.VarChar)
                arParams(0).Direction = ParameterDirection.Input
                arParams(0).Value = id

                With New DataLayer
                    .ExecSP("dbo.MyStoredProc", intReturnVal, arParams, ds)
                End With

                Return ds
I Have Nine Lives You Have One Only
THINK!


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 250

    TopList