插入语句中的语法错误有什么问题

时间:2019-09-02 18:33:42

标签: vb.net

Option Explicit On
Imports System.Data.OleDb
Public Class Form1
    Dim objCon As New OleDbConnection
    Dim strSQL As String
    Dim strConnect As String = "Provider= Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Abry\Documents\Bilik.accdb"
    Dim da As New OleDb.OleDbDataAdapter
    Dim ds As New DataSet

    Private Sub TempahButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TempahButton.Click
        Dim startDate As Date
        Dim str As String
        startDate = DateTimePicker1.Value

        objCon.ConnectionString = strConnect
        objCon.Open()
        str = "Insert into bilik(Bilik, Tujuan, Tarikh, Masa Masuk, Masa Keluar) values('" & BilikComboBox.SelectedIndex & "','" & TujuanTextBox.Text & "','" & DateTimePicker1.Value.ToShortDateString & "','" & MasaMasukMaskedTextBox.Text & "','" & MasaKeluarMaskedTextBox.Text & "')"

        Dim cmd As OleDbCommand = New OleDbCommand(str, objCon)
        cmd.Parameters.Add(New OleDbParameter("Bilik", CType(BilikComboBox.SelectedIndex, String)))
        cmd.Parameters.Add(New OleDbParameter("Tujuan", CType(TujuanTextBox.Text, String)))
        cmd.Parameters.Add(New OleDbParameter("Tarikh", CType(DateTimePicker1.Value, Date)))
        cmd.Parameters.Add(New OleDbParameter("Masa Masuk", CType(MasaMasukMaskedTextBox.Text, String)))
        cmd.Parameters.Add(New OleDbParameter("Masa Keluar", CType(MasaKeluarMaskedTextBox.Text, String)))

        Try
            cmd.ExecuteNonQuery()
            cmd.Dispose()
            objCon.Close()
            TujuanTextBox.Clear()
            BilikComboBox.Text = ""
            DateTimePicker1.Value = ""
            MasaMasukMaskedTextBox.Clear()
            MasaKeluarMaskedTextBox.Clear()
        Catch ex As Exception
            MsgBox(ex.Message)


        End Try


    End Sub
End Class

此数据库位于MS ACCESS上

插入语句始终出错

1 个答案:

答案 0 :(得分:0)

应为该项目和所有项目设置“严格启用”选项。这是一个两部分的过程。首先针对当前项目-在解决方案资源管理器中,双击我的项目。选择左侧的编译。在Option Strict下拉菜单中,选择ON。第二个用于将来的项目-转到“工具”菜单->“选项”->“项目和解决方案”->“ VB默认值”。在Option Strict下拉菜单中,选择ON。这样可以避免在运行时出现错误。

将数据库对象保留在本地,以便您可以控制它们是否已关闭和处置。即使有错误,Using...End Using块也会为您完成此操作。

您要将这些值连接到sql中(非常糟糕-将应用程序打开到sql注入),然后在Insert语句中不存在任何参数时尝试添加参数。您可以将问号用作参数的占位符或使用名称。 Access不在乎名称。只有sql语句中的位置与参数添加到参数集合的顺序匹配。我喜欢使用名称,因此可以轻松检查是否以正确的顺序添加了参数。

.Text属性包含一个字符串,因此不必将其转换为字符串。

DataTimePicker的.Value属性是DateTime。无需转换。

添加参数时,请使用接受OleDbType和理想情况下的大小的重载。您将需要检查数据库中的字段以获取此信息。

在关闭连接之前,不显示消息框或清除文本框。连接是珍贵的对象,应在最后一刻打开并尽快关闭。

Dim strConnect As String = "Provider= Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Abry\Documents\Bilik.accdb"

Private Sub TempahButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TempahButton.Click
    Try
        Using objCon As New OleDbConnection(strConnect)
            Dim str = "Insert into bilik(Bilik, Tujuan, Tarikh, [Masa Masuk], [Masa Keluar]) values(@Bilik, @Tujuan, @Tarikh, @MasaMasuk, @MasaKeluar);"
            Using cmd As OleDbCommand = New OleDbCommand(str, objCon)
                cmd.Parameters.Add("@Bilik", OleDbType.VarChar).Value = BilikComboBox.SelectedIndex.ToString
                cmd.Parameters.Add("@Tujuan", OleDbType.VarChar).Value = TujuanTextBox.Text
                cmd.Parameters.Add("@Tarikh", OleDbType.Date).Value = DateTimePicker1.Value
                cmd.Parameters.Add("@MasaMasuk", OleDbType.VarChar).Value = MasaMasukMaskedTextBox.Text
                cmd.Parameters.Add("@MasaKeluar", OleDbType.VarChar).Value = MasaKeluarMaskedTextBox.Text
                objCon.Open()
                cmd.ExecuteNonQuery()
            End Using
        End Using 'Closes and disposes the connection
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
    TujuanTextBox.Clear()
    BilikComboBox.SelectedIndex = -1
    DateTimePicker1.Value = ""
    MasaMasukMaskedTextBox.Clear()
    MasaKeluarMaskedTextBox.Clear()
End Sub