将数据插入MS Access;插入错误

时间:2014-12-23 02:32:56

标签: .net vb.net ms-access

亲爱的程序员,

我正在使用VB.NET 2008,目前正在尝试将textbox / combobox / datetimepicker值添加到我的Access数据库中,该数据库现已连接到我的应用程序中。

我的表名是Encoding。到目前为止,这是我的代码:

Imports System.Data.OleDb

Public Class frmEncode
Dim strConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" &  System.Environment.CurrentDirectory & "\encoding.accdb"

Dim cnnOLEDB As New OleDbConnection(strConnectionString)
Dim cmdOLEDB As New OleDbCommand
Dim cmd As OleDbCommand

'------------
Private Sub ButtonX7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonX7.Click

    Dim InsertQuery As String

    InsertQuery = "INSERT INTO Encoding (Client, Address, Date_Bill, Vessel, TIN, Port, Voyage No, Vessel Type, InterPleader1, InterPleader2, Waste Details, Payment, BI#, CSR#, Amount)VALUES(@client, @address, @date, @vess, @tin, @port, @voyno, @vesstype, @intplead1, @intplead2, @waste, @pay, @bi, @csr, @amnt)"

    Dim cmd As OleDbCommand = New OleDbCommand(InsertQuery, cnnOLEDB)

    cmd.Parameters.AddWithValue("@client", ComboBoxEx1.Text)
    cmd.Parameters.AddWithValue("@address", TextBoxX1.Text)
    cmd.Parameters.AddWithValue("@date", DateTimePicker1.Text)
    cmd.Parameters.AddWithValue("@vess", TextBoxX2.Text)
    cmd.Parameters.AddWithValue("@tin", TextBoxX3.Text)
    cmd.Parameters.AddWithValue("@port", ComboBoxEx2.Text)
    cmd.Parameters.AddWithValue("@voyno", TextBoxX4.Text)
    cmd.Parameters.AddWithValue("@vesstype", ComboBoxEx3.Text)
    cmd.Parameters.AddWithValue("@intplead1", ComboBoxEx4.Text)
    cmd.Parameters.AddWithValue("@intplead2", ComboBoxEx5.Text)
    cmd.Parameters.AddWithValue("@waste", ComboBoxEx6.Text)
    cmd.Parameters.AddWithValue("@pay", ComboBoxEx7.Text)
    cmd.Parameters.AddWithValue("@bi", TextBoxX7.Text)
    cmd.Parameters.AddWithValue("@csr", TextBoxX5.Text)
    cmd.Parameters.AddWithValue("@amnt", TextBoxX8.Text)

    cnnOLEDB.Open()
    cmdOLEDB = New OleDbCommand(InsertQuery, cnnOLEDB)
    cmd.ExecuteNonQuery()
    cnnOLEDB.Close()
    frmEncodeDatabase.Show()


End Sub

错误发生在< cmd.ExecuteNonQuery()'中,它表示INSERT INTO语句'中的语法错误。

我不知道System Into语句有什么问题。我应该添加Try / Catch语句吗?在值周围添加引号?或者添加括号??

3 个答案:

答案 0 :(得分:1)

您需要将包含空格,特殊字符或关键字的字段名称括起来:

[Voyage No],... [BI#], etc...

数据库中的所有字段都是字符串类型吗?您的所有参数都将传递字符串,因此您应该转换它们,例如日期和数字等值。

答案 1 :(得分:1)

列名中包含无效字符(#和空格),这意味着您需要用括号括起来。例如,Waste Details需要变为[Waste Details]CSR#需要[CSR#}。

答案 2 :(得分:0)

您的列名中包含非法字符。删除所有非字母数字字符(例如#)。