Как вставить строки в таблицу MS Access 2003 в VB.net с помощью адаптера/команды Oledb?

Я создал форму для управления контактами, такую ​​как телефонная книга, поэтому я создал почти 12 полей в MS Access 2003, включая идентификатор в качестве первичного ключа (автоматический номер), проблема заключается в том, что при вставке данных (полученных от пользователя) в таблицу.

Imports System.Data.OleDb
Public Class FrmMain

    Private Sub FrmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        connection_open()
    End Sub
    Dim adp As OleDbDataAdapter
    Dim dt As DataTable



    Private Sub BtnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSave.Click
        Dim sql As String

        sql = "insert into TblContacts (FName, Company, Contact_1, Contact_2, Address, Email_1, Email_2, Web, SNS, Date_Saved, Cont_Image) values ('" & TxtFName.Text & "' ,'" & TxtCompany.Text & "','" & TxtCont_1.Text & "','" & TxtCont_2.Text & "','" & TxtAddress.Text & "','" & TxtEmail_1.Text & "','" & TxtEmail_2.Text & "','" & TxtWeb.Text & "','" & TxtSNS.Text & "',#" & TxtDate.Text & "#,'" & TextBox10.Text & "')"

        Try
            adp = New OleDbDataAdapter
            adp.InsertCommand = New OleDbCommand(sql, con)
            adp.InsertCommand.ExecuteNonQuery()


            MsgBox("Saved Successfully!")

        Catch ex As Exception

            MsgBox(ex.ToString)

        End Try
    End Sub

    Private Sub ToolStripButton3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton3.Click
        Try
            dt = New DataTable
            adp = New OleDbDataAdapter("Select * from TblContacts", con)
            adp.Fill(dt)

            DataGridView1.DataSource = dt


        Catch ex As Exception

            MsgBox(ex.Message)

        End Try
    End Sub


    'Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    '    ToolStripTextBox2.Text = Now
    'End Sub

End Class

**Connection Module:**

Imports System.Data.OleDb

Module connection_module

    Public con As New OleDbConnection
    Public Sub connection_open()
        Try
            If con.State = ConnectionState.Open Then
                con.Close()
            End If
            con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\Contacts.mdb"
            con.Open()

        Catch ex As Exception

            MsgBox(ex.Message)

        End Try
    End Sub
End Module

https://picasaweb.google.com/105381696083885067883/VBNet?authuser=0&authkey=Gv1sRgCPvqiqCrjqCAfQ&feat=directlink


person Sree Vardhan R    schedule 13.07.2012    source источник
comment
Снимок экрана где-то потерялся? Значит, мы не можем увидеть ваше сообщение об ошибке?   -  person RBarryYoung    schedule 13.07.2012
comment
Удар в темноте, убедитесь, что ваши имена столбцов верны. Может быть, SNS - это SSN (номер социального страхования)? Кроме того, научитесь использовать параметры. Ваш запрос уязвим для SQL-инъекций.   -  person LarsTech    schedule 13.07.2012
comment
@LarsTech: О, хороший улов! Ставлю на это...   -  person RBarryYoung    schedule 13.07.2012


Ответы (1)


Имя и изображение являются зарезервированными словами в MS Access и должны быть заключены в квадратные скобки [name]

Является ли Date_Saved действительно текстом? Если нет, то разделители #, а не '

И, конечно же, точка @Lars.

Наконец, вы могут рассмотреть параметры или Передача параметра в запрос к базе данных Access

person Fionnuala    schedule 13.07.2012
comment
Я отредактировал вопрос в соответствии с вашим советом, а также добавил ссылку на изображения. Надеюсь, это поможет объяснить мой вопрос. - person Sree Vardhan R; 14.07.2012
comment
Я протестировал схему вашего кода, и FName = "abc" : ADate = Now : sql = "insert into Table1 (AText, ADate) values ('" & FName & "',#" & ADate & "#)" : MsgBox(sql) у меня работает, поэтому я думаю, вам следует проверить, что вы получаете из текстового поля. Однако на самом деле вам не нужно использовать текстовое поле для даты сохранения, потому что это сегодня, поэтому "insert into Table1 (AText, ADate) values ('" & FName & "',Now())" должно подойти. - person Fionnuala; 14.07.2012
comment
Я должен еще раз подчеркнуть, что вы избежите огромного количества проблем с параметрами. В нынешнем виде, если какое-либо из ваших текстовых полей содержит одинарную кавычку ('), запрос завершится ошибкой. - person Fionnuala; 14.07.2012