ExecuteNonQuery()不适用于INSERT函数

时间:2014-06-01 18:06:20

标签: vb.net

首先,我不是一名专业程序员。所以在我的程序中可能存在一些大错误!

问题是:

我将Visual express中的WPF文件与MS Access数据库(格式2003)相关联。每当我尝试运行以下内容时(抱歉荷兰代码):

Public Sub ToevoegenPersoon(voornaam As String, achternaam As String, mailadres As String, geboortedatum As Date, klantennummer As Integer, specialeCategorie As String)
    Dim opdracht As OleDbCommand
    Dim sqlOpdracht As String
    sqlOpdracht = "INSERT INTO Klant (Voornaam, achternaam, mailadres, geboortedatum, klantennummer, specialeCategorie)" & _
          "VALUES (" & Chr(34) & "" & voornaam & "" & Chr(34) & "," & Chr(34) & "" & achternaam & "" & Chr(34) & "," & Chr(34) & "" & _
           mailadres & "" & Chr(34) & "," & Convert.ToString(geboortedatum) & "," & Convert.ToString(klantennummer) & "," & Chr(34) & "" & specialeCategorie & "" & Chr(34) & ")"

    opdracht = New OleDbCommand(sqlOpdracht, connectie)
Debug.WriteLine(sqlOpdracht)
MsgBox(sqlOpdracht)

opdracht.Connection.Open()
opdracht.ExecuteNonQuery()
opdracht.Connection.Close()

End Sub

我的程序总是出现ExecuteNonQuery()函数错误。此功能用于以下事件:

Private Sub btnKlantToevoegen_Click(sender As Object, e As RoutedEventArgs) Handles btnKlantToevoegen.Click
    Dim achternaam As String = boxVoornaam.Text
    Dim voornaam As String = boxAchternaam.Text
    Dim emailadres As String = boxEmailadres.Text
    Dim geboortedatum As Date = GeboortedatumSelectie.SelectedDate
    Dim klantennummer As Integer = 5
    Dim specialeCategorie As String = "Jeugd"

    Try
    database.ToevoegenPersoon(voornaam, achternaam, emailadres, geboortedatum, klantennummer, specialeCategorie)
    Catch ex As Exception
    End Try
    boxAchternaam.Clear()
    boxVoornaam.Clear()
    boxEmailadres.Clear()



End Sub

在顶部,我声明以下内容将MS Access数据库与Visual express连接:

Private connectiestring As String = My.Settings.Database_Drijkoningen_Konings1ConnectionString
    Private connectie As OleDbConnection
    connectie = New OleDbConnection(connectiestring)

运行此程序时,executenonquery()会出错。我不知道它可能是什么。有人吗?

提前致谢

的Jeroen

1 个答案:

答案 0 :(得分:1)

不确定这是否可以解决您的问题。我不知道错误信息。但是,我将展示一个简单的参数化查询,可能有很多帮助

Public Sub ToevoegenPersoon(voornaam As String, achternaam As String, mailadres As String, geboortedatum As Date, klantennummer As Integer, specialeCategorie As String)
    Dim opdracht As OleDbCommand
    Dim sqlOpdracht As String
    sqlOpdracht = "INSERT INTO Klant (Voornaam, achternaam, mailadres, " & _ 
                  "geboortedatum, klantennummer, specialeCategorie) " & _
                  "VALUES (?,?,?,?,?,?)"

    opdracht = New OleDbCommand(sqlOpdracht, connectie)
    opdracht.Parameters.AddWithValue("@p1", voornaam)
    opdracht.Parameters.AddWithValue("@p2", achternaam)
    opdracht.Parameters.AddWithValue("@p3", mailadres)
    opdracht.Parameters.AddWithValue("@p4", Convert.ToString(geboortedatum))
    opdracht.Parameters.AddWithValue("@p5", Convert.ToString(klantennummer))
    opdracht.Parameters.AddWithValue("@p6", specialeCategorie)
    opdracht.Connection.Open()
    opdracht.ExecuteNonQuery()
    opdracht.Connection.Close()
End Sub

现在,通过参数化查询,命令文本上没有更多的连接,仅此一项将消除忘记值之间的某些引号或逗号的任何可能性。 (当然这也会删除Sql Injection问题和解析包含特殊字符的字符串)

还有一个问题需要解决。第4和第5个参数接收字符串值。这要求数据表上的基础字段是字符串字段而不是DateTime。如果不是这种情况,则需要传递(作为参数值)日期值

相关问题