【问题标题】:Can't save data to Access Database无法将数据保存到 Access 数据库
【发布时间】:2014-04-07 12:10:50
【问题描述】:

我从其他来源学习了这个编程,我还下载了他的文件来测试它是否有效。我对他做了同样的事情,但我的工作不正常,也没有出现任何错误。 哪位前辈可以帮我做一些更正或调试。

这是我的代码:

Dim Command As New OleDb.OleDbCommand
Dim Adapter As New OleDb.OleDbDataAdapter
Dim Connection As OleDb.OleDbConnection = AConnection()

Public Function AConnection() As OleDb.OleDbConnection
    Return New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\Music_Sales_Database.mdb")
End Function

Private Sub SendCustomerInformationToDatabase()
    Connection.Open()
    With Command
        .Connection = Connection
        .CommandText = "INSERT into Customer(Customer_ID,First_Name,Last_Name,Contact_Number,Email_Address) " & _
            "Values('" & txtCustomerID.Text & "','" & txtFirstName.Text & "','" & txtLastName.Text & "','" & txtContactNumber.Text & "','" & _
        "','" & txtEMail.Text & "')"

    End With
    Connection.Close()
End Sub

Private Sub CheckOut_Reservation_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    txtDateOfReservation.Text = Date.Today
    txtCustomerID.Focus()
    InputText = txtContactNumber.Text
    NumericCheck = IsNumeric(InputText)

    Connection.Open()
    With Command
        .Connection = Connection
        .CommandText = "SELECT * from Customer"
    End With
    Dim Table As New DataTable

    Adapter.SelectCommand = Command
    Adapter.Fill(Table)

    Connection.Close()
    Adapter.Dispose()

End Sub

Private Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click

    SendCustomerInformationToDatabase()

    Dim CheckOutSound As String
    Dim path = System.Windows.Forms.Application.StartupPath
    Dim MyPlayer As New SoundPlayer()

    CheckOutSound = "\Success.wav"
    MyPlayer.SoundLocation = path & CheckOutSound
    MyPlayer.Play()

    If AInputCorrect = True And BInputCorrect = True And CInputCorrect = True And DInputCorrect = True And EInputCorrect = True Then
        FInputCorrect = True
    Else
        FInputCorrect = False
    End If

    If FInputCorrect = True Then
        MessageBox.Show("Reservation Submitted.", "Reservation Successful", MessageBoxButtons.OK, MessageBoxIcon.None)
    End If

    If FInputCorrect = False Then
        MessageBox.Show("Please check your Customer Information and try again.", "Reservation Failed", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
    End If

    'Me.Close()
End Sub

谢谢

【问题讨论】:

  • 请不要构建字符串,这很危险。使用参数查询,例如stackoverflow.com/questions/12954039/… 不必使用问号,但必须按正确的顺序获取参数。
  • 你遇到了什么错误,在哪里或者它没有做什么? “它不工作”不是很有帮助...您确实构建了一个 SQL 语句,然后不执行它(将其发送到数据库)

标签: vb.net ms-access


【解决方案1】:

据我所知,您没有执行您的命令:

Private Sub SendCustomerInformationToDatabase()
    Connection.Open()
    With Command
        .Connection = Connection
        .CommandText = "INSERT into Customer(Customer_ID,First_Name,Last_Name,Contact_Number,Email_Address) " & _
         "Values('" & txtCustomerID.Text & "','" & txtFirstName.Text & "','" & txtLastName.Text & "','" & txtContactNumber.Text & "','" & _
         "','" & txtEMail.Text & "')"

    End With

'Execute my newly created command
    Command.ExecuteNonQuery
    Connection.Close()
End Sub

MSDN - ExecuteNonQuery

请注意,如果您的查询包含语法错误,您可能会遇到更多异常。

请记住,像这样构建 SQL-Query 确实是一种BAD 实践。我建议你看看下面的链接

Stack Overflow: Preventing SQL Injection

Code Project: Sql Injection Attacks

Using Parameterized queries

【讨论】:

  • 注入漏洞呢?
  • 这也是如此,但这就是它无法执行的原因。我已经添加了一些与此相关的链接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
相关资源
最近更新 更多