所以即时通讯试图添加字段到数据库中。它是.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字段,该字段会自动递增,这会发生任何变化吗?
正如其他答案已经解释的那样,您需要在包含空格的列名称周围使用方括号,但是还需要为字段添加一个值,否则您将无法执行该命令。
我将尝试展示一个完整的例子
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来加载数据集。