一尘不染

使用vb.net将MS Access行插入数据库

sql

所以即时通讯试图添加字段到数据库中。它是.mdb数据库,可以通过Microsoft访问。

该表的名称为“联系人”。

Dim con As New OleDb.OleDbConnection
    Dim dbProvider As String
    Dim dbSource As String
    Dim ds As New DataSet
    Dim da As OleDb.OleDbDataAdapter
    Dim sql As String

    dbProvider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;"
    dbSource = "Data Source= C:\Users\Owner\Desktop\Contacts.mdb"

    con.ConnectionString = dbProvider & dbSource

    con.Open()

    sql = "INSERT INTO Contacts (FName, LName, Age, Address Line 1, Address Line 2, City, State, Zip, Home Phone, Work Phone, Email, Sex) VALUES (a, b, c,d,e,f,g,h,i,j,k)"
    da = New OleDb.OleDbDataAdapter(Sql, con)
    da.Fill(ds, "Contacts")

我的错误是INSERT INTO语句中的语法错误。毫无意义。我究竟做错了什么?

编辑*我通过在建议的certian字段周围添加[]解决了我的原始问题,谢谢。现在我得到…

没有为一个或多个必需参数提供值。

数据库具有一个主ID字段,该字段会自动递增,这会发生任何变化吗?


阅读 155

收藏
2021-03-17

共1个答案

一尘不染

正如其他答案已经解释的那样,您需要在包含空格的列名称周围使用方括号,但是还需要为字段添加一个值,否则您将无法执行该命令。

我将尝试展示一个完整的例子

Dim dbProvider  = "PROVIDER=Microsoft.Jet.OLEDB.4.0;"
Dim dbSource = "Data Source= C:\Users\Owner\Desktop\Contacts.mdb"

Dim sql = "INSERT INTO Contacts (FName, LName, Age, " & _ 
          "[Address Line 1], [Address Line 2], City, State, Zip, " & _ 
          "[Home Phone], [Work Phone], Email, Sex) " & _
          "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"

Using con = New OleDb.OleDbConnection(dbProvider & dbSource)
Using cmd = new OleDb.OleDbCommand(sql, con)
    con.Open()
    cmd.Parameters.AddWithValue("@p1", "Value For FName")
    cmd.Parameters.AddWithValue("@p2", "Value For LName")
    cmd.Parameters.AddWithValue("@p3", Convert.ToInt32("Value For Age"))
    .... and so on for the other parameters .....
    cmd.ExecuteNonQuery()
End Using
End Using

在此示例中,我为参数(?)插入了12个占位符,然后在所需的12个参数中添加了前3个参数。请注意,对于OleDb,参数集合仍然需要添加名称( @pX
),但是在执行查询时,将按照占位符的相同顺序来选择参数值。

另外,我还使用了Using语句关闭并处理了诸如连接和命令之类的一次性对象。

最后,通常使用OleDbCommand中的ExecuteNonQuery执行插入查询,并且无需执行SELECT查询时,就无需使用OleDbAdapter并调用Fill来加载数据集。

2021-03-17