Использование Access 2007 запросов из VB .NET - PullRequest
1 голос
/ 25 июня 2009

У меня есть настройка базы данных доступа, к которой я подключаюсь через ODBC, файлы доступа уже имеют все необходимые запросы, и я просто хотел бы вызвать их из моего приложения.

Я использую Visual Basic .NET, и это то, что я пробовал до сих пор .....

Заранее благодарим за любую помощь, которую вы можете предложить.

Ben

        Dim command As OdbcCommand = New OdbcCommand

    command.Connection = cnx
    command.CommandText = "sp_InsertClient"
    command.CommandType = CommandType.StoredProcedure

    '//====== create ABN paramenter =============
    Dim param1 As OdbcParameter = New OdbcParameter("inABN", abn)
    param1.Direction = ParameterDirection.Input
    param1.DbType = DbType.String
    'add abn parameter
    command.Parameters.Add(param1)

   Dim dataAdapter As OdbcDataAdapter = New OdbcDataAdapter(command)

    dataAdapter.InsertCommand = command
    Try
        cnx.Open()
        dataAdapter.InsertCommand.ExecuteNonQuery()
    Catch ex As Exception
        MessageBox.Show(ex.Message, "Error", _
                        MessageBoxButtons.OK, MessageBoxIcon.Error)
        Exit Sub
    Finally
        cnx.Close()
    End Try


    MessageBox.Show("DONE")

Ответы [ 4 ]

0 голосов
/ 28 июня 2009

Спасибо за ссылки, я их уже видел, но пропустил добавление EXECUTE, которое, похоже, заставляет запросы выполняться сейчас, но мои параметры не передаются в запрос доступа.

Я проверял, и мои параметры были добавлены в команду, а не в запрос на доступ?

Я также пробовал Parameters.AddWithValue ("имя_параметра", значение)

но это был тот же результат

Также я изменил свой запрос в доступе к этому, оказывается, квадратные скобки, где не нужно ...

INSERT INTO tblClients (ABN, CompanyName, ContactName, PhoneNumber, Address) ЗНАЧЕНИЯ (inABN, inCompanyName, inContactName, inPhoneNumber, inAddress)

Спасибо Ben

0 голосов
/ 25 июня 2009

Вот код VB

Public Sub AddClient(ByVal abn As String, ByVal companyName As String, _
                     ByVal contactName As String, ByVal phoneNumber As String, _
                     ByVal address As String)
    'Dim command As OdbcCommand = New OdbcCommand
    Using cnx As New OdbcConnection(My.Settings.connectionString)
        Using command As New OdbcCommand
            command.Connection = cnx
            command.CommandText = "sp_InsertClient"
            command.CommandType = CommandType.StoredProcedure

            '//====== create ABN paramenter =============
            Dim param1 As OdbcParameter = New OdbcParameter("inABN", abn)
            param1.Direction = ParameterDirection.Input
            param1.DbType = DbType.String
            'add abn parameter
            command.Parameters.Add(param1)

            '//====== create CompanyName Parameter ================
            Dim param2 As OdbcParameter = New OdbcParameter("inCompanyName", companyName)
            param2.Direction = ParameterDirection.Input
            param2.DbType = DbType.String
            'add the parameter
            command.Parameters.Add(param2)

            '//======== create ContactName Param ===============
            Dim param3 As OdbcParameter = New OdbcParameter("inContactName", contactName)
            param3.Direction = ParameterDirection.Input
            param3.DbType = DbType.String
            'add the parameter
            command.Parameters.Add(param3)

            '//=========== create PhoneNumber Parameter ===============
            Dim param4 As OdbcParameter = New OdbcParameter("inPhoneNumber", phoneNumber)
            param4.Direction = ParameterDirection.Input
            param4.DbType = DbType.String
            'add paramater
            command.Parameters.Add(param4)

            '//=========== create Address Parameter ===============
            Dim param5 As OdbcParameter = New OdbcParameter("inAddress", address)
            param5.Direction = ParameterDirection.Input
            param5.DbType = DbType.String
            'add paramater
            command.Parameters.Add(param5)

            Try
                cnx.Open()
                command.ExecuteNonQuery()
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Error", _
                                MessageBoxButtons.OK, MessageBoxIcon.Error)

                Exit Sub
            End Try
        End Using
    End Using
    MessageBox.Show("DONE")
End Sub

А вот мой запрос в Access.

INSERT INTO tblClients ( ABN, CompanyName, ContactName, PhoneNumber, Address )
VALUES ([inABN], [inCompanyName], [inContactName], [inPhoneNumber], [inAddress]);

Спасибо за помощь ...

0 голосов
/ 28 июня 2009

Отредактировал мой старый ответ ... это было неправильно

Согласно , и , , вы все делаете правильно.

Альтернативой использованию предварительно созданных запросов в доступе является определение их как хранимых процедур в доступе. Работа с хранимыми процедурами MS Access в VB.NET. Часть 1 - хороший обзор этого.

0 голосов
/ 25 июня 2009

Итак, какой у вас вопрос?

Глядя на код выше, вам не нужен dataAdapter.
Вы можете позвонить command.ExecuteNonQuery(), чтобы сделать работу.

РЕДАКТИРОВАТЬ: Кроме того, вы можете заключить OdbcConnection & OdbcCommand в блок using...end using.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...