Member 13895315 Ответов: 3

Как вставить, обновить, удалить записи в таблице access с помощью VB 2015


Привет Друзья,

Я использую Visual Basic-2015 и разрабатываю проект с использованием базы данных Access в фоновом режиме.Мои коды приведены ниже. Но после запуска кода он не добавляет записи в таблицу доступа и не выдает никаких ошибок. Какую я совершаю ошибку ? Пожалуйста помочь...

Заранее спасибо.
Мохан

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

Imports System.Data.OleDb
Module Module1

    Public Dbconnection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\FFLeaves\FFLeaves.mdb;Persist Security Info=True;Jet OLEDB:Database Password=01935097 ")


    ' For Adding New Employee

    Public AddEmpCmd As New OleDbCommand("Select * from Emp_Master", Dbconnection)
    Public AddEmpAdapter As New OleDbDataAdapter(AddEmpCmd)
    Public AddEmpCommandbuilder As New OleDbCommandBuilder(AddEmpAdapter)
    Public AddEmpDataSet As New DataSet
    Public AddEmpReader As OleDbDataReader

End Module

****************************************
Form1 Save Button click event
***************************************
 Private Sub BtnSave_Click(sender As Object, e As EventArgs) Handles BtnSave.Click
            '********************************************************************************************
            BtnSave.Enabled = False

        Dbconnection.Open()
        AddEmpCmd.CommandType = CommandType.Text

        AddEmpCmd.CommandText = "INSERT INTO EMP_MASTER" _
            & "(CurrYear, Name) VALUES" _
            & "(@CurrYear, @Sap_No]) ; "

        Try
            AddEmpCmd.Parameters.AddWithValue("'@CurrYear'", CmbYear.Text)
            AddEmpCmd.Parameters.AddWithValue("@Sap_No", TxtSapID.Text)


            AddEmpCmd.ExecuteNonQuery()
            Dbconnection.Close()

        Catch ex As Exception

        End Try


    End Sub

3 Ответов

Рейтинг:
2

OriginalGriff

Он не показывает никакой ошибки, потому что вы проглатываете исключение:

Try
    AddEmpCmd.Parameters.AddWithValue("'@CurrYear'", CmbYear.Text)
    AddEmpCmd.Parameters.AddWithValue("@Sap_No", TxtSapID.Text)
    
    
    AddEmpCmd.ExecuteNonQuery()
    Dbconnection.Close()

Catch ex As Exception

End Try
Когда вы делаете это, это как если бы ошибка никогда не произошла - Вы не получаете никакого сообщения, Вы не получаете никакой ошибки. И вы не можете понять, в чем была проблема, потому что вы отбрасываете всю информацию, которая вам говорит!

Начните с этого:
Try
    AddEmpCmd.Parameters.AddWithValue("'@CurrYear'", CmbYear.Text)
    AddEmpCmd.Parameters.AddWithValue("@Sap_No", TxtSapID.Text)
    AddEmpCmd.ExecuteNonQuery()
    Dbconnection.Close()
Catch ex As Exception
    MessageBox.Show(ex.Message)
End Try
И это даст вам основную информацию на панели вывода отладчика. добавьте точку останова в строку MessageBox, и вы сможете получить дополнительную информацию от объекта исключения с помощью отладчика.

Как только у вас это есть, может быть, станет яснее, в чем проблема - но без этого вы просто догадываетесь!


Рейтинг:
1

katkot_rewsh

для удаления используйте что-то вроде этого

Dim cnn As New OleDb.OleDbConnection
        Dim cmd As New OleDb.OleDbCommand
        cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\database.mdb;Persist Security Info=False;"
        cnn.Open()
        cmd.Connection = cnn
        cmd.CommandText = "delete from Drums where DrumType = '" & ComboBox7.SelectedItem & "'" 'delete from database
        cmd.ExecuteNonQuery()
        cnn.Close()
        MessageBox.Show("All data removed sucssefully")


для вставки используйте что-то вроде этого

cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\database.mdb;Persist Security Info=False;"
                cnn.Open()
                cmd1.Connection = cnn
                cmd1.CommandText = "insert into Flange (Flange) VALUES ('" & Val(ComboBox14.Text) & "')"
                cmd1.ExecuteNonQuery()
                cnn.Close()



для чтения используйте что-то вроде этого

Dim Cmd As New OleDbCommand 'cmd as command to use
        Cmd.Connection = conn 
        Cmd.CommandText = "select * from Drums where Lagging = '" & ComboBox12.SelectedItem & "' and Locall = '" & ComboBox11.SelectedItem & "'" 
        conn.Open() 'open connection
        dr = Cmd.ExecuteReader
        While dr.Read

            Label54.Text = dr("Code").ToString()

        End While
        dr.Close()
        conn.Close()


CHill60

Причины моего понижения голоса:
- Вы предоставили решение, которое сделало бы OP уязвимым для атак SQL - инъекций-см. SQL-инъекции | фонд[^]
tl;dr - никогда не объединяйте пользовательский ввод таким образом для создания SQL-запросов
- Вы на самом деле не пытались ответить на вопрос, вы ответили только на название поста. Пожалуйста, внимательно прочитайте вопросы, чтобы убедиться, что ваше решение актуально
- Вы не включили никакой обработки ошибок - что на самом деле было проблемой с кодом OP - см. Решение 1
- Кроме того, вы использовали имена по умолчанию для элементов управления - совершенно бессмысленные для нас
- Кроме того, на этот вопрос был дан ответ 2 года назад

Рейтинг:
0

Maciej Los

Я бы попробовал удалить окружающие ['] снизу линии:

AddEmpCmd.Parameters.AddWithValue("'@CurrYear'", CmbYear.Text)


Примечание № 1:

Даже если официальная документация утверждает, что поставщик OleDb не поддерживает именованные параметры, я думаю, что могу сказать, что поставщик OleDb для MS Access database engine "частично поддерживает" именованные параметры, но одно условие должно быть выполнено: при добавлении параметров в OleDbParameterCollection[^] вы должны сохранить порядок, в котором параметры существуют в инструкции sql.

Примечание № 2:

Существует хорошая практика программирования, позволяющая отделить логику бизнеса от логики доступа к данным. Видеть:
Пошаговое руководство: создание уровней доступа к данным и бизнес-логики в ASP.NET[^]
Учебник 1: Создание уровня доступа к данным[^]
Учебник 2: Создание уровня бизнес - логики[^]
Запись переносимого уровня доступа к данным[^]

Наконец, я бы посоветовал прочитать эту замечательную статью:
Упрощенный доступ к базе данных через ADO.NET интерфейсы[^]


Member 13895315

Спасибо друзья,

Я пробовал оба :

1. удалено окружение [ ' ]
2. MessageBox.Показать(напр.сообщение)

он показывает "синтаксическую ошибку в выражении карьера "@Sap_No);

Как можно решить эту проблему? пожалуйста помочь.