2009-06-25 6 views
0

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

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

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

Бен

 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") 

ответ

0

Итак, каков ваш вопрос?

Рассматривая приведенный выше код, вам не нужен адаптер данных.
Чтобы выполнить эту работу, вы можете позвонить в command.ExecuteNonQuery().

EDIT: Кроме того, вы можете обернуть OdbcConnection & OdbcCommand в блок using...end using.

+0

К сожалению я должен был объяснить более, я снял DataAdapter и просто использовали command.ExecuteNonQuery(), но все та же ошибка Недопустимый оператор SQL; ожидаемые «DELETE», «INSERT», «PROCEDURE», «SELECT» или «UPDATE». Мой вопрос в том, что может быть неправильным с кодом, поскольку запрос работает изнутри доступа. – 2009-06-25 08:19:18

+0

Не могли бы вы отправить запрос, который работает из Access? – shahkalpesh

+0

Редактируйте код и покажите, что у вас есть на данный момент вместе с кодом из sp_Insert. – shahkalpesh

0

Вот В.Б. Code

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

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

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

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

0

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

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

Я также попытался Parameters.AddWithValue («ParamName», значение)

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

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

INSERT INTO tblClients (ABN, CompanyName, CONTACTNAME, PHONENUMBER, адрес) VALUES (inABN, inCompanyName, inContactName, inPhoneNumber, inAddress)

Благодаря Бен

Смежные вопросы