所以我试图将字段添加到数据库中。它是.mdb数据库,微软访问。
表格的名称是“联系人”。
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语句中的语法错误。这没有任何意义。我做错了什么?
编辑* 我通过在建议的字段周围添加[]来解决我的严重问题,谢谢。现在我得到......
没有给出一个或多个必需参数的值。
数据库有一个自动增量的主ID字段,这会改变什么吗?
答案 0 :(得分:3)
在方括号[]
之间放置带有空格的列名例如[Address Line 1]
干杯
答案 1 :(得分:3)
正如其他答案已经解释过的那样,您需要在包含空格的列名称周围使用方括号,但您还需要为字段添加值,否则无法执行该命令。
我将尝试展示一个完整的例子
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执行Insert查询,并且在没有执行SELECT查询时,无需使用OleDbAdapter并调用Fill来加载DataSet
答案 2 :(得分:1)
可以直接编写由单个单词组成的表和字段名称,例如FName
。
Address Line 1
之类的名称将需要包含在[]
之间以使SYNhax保持一致。
INSERT INTO Contacts (FName, LName, Age, [Address Line 1], [Address Line 2], City, State, Zip, [Home Phone], [Work Phone], Email, Sex) VALUES (...
这同样适用于以保留字命名的对象。
答案 3 :(得分:-1)
如果我理解你的需求是正确的:
翻译自 :Se entendi oqueestáprecisandoéistoaqui,vejaocódigo:
comando = New OleDbCommand("INSERT INTO TabClientes(NomeCliente,Telefone,CEP,Rua,Bairro,Cidade,Estado)" & _
"Values (@nome,@telefone,@cep,@rua,@bairro,@cidade,@estado)")
comando.Connection = conn
comando.Parameters.AddWithValue("@nome", txtnome.Text)
comando.Parameters.AddWithValue("@telefone", mkbtelefone.Text)
comando.Parameters.AddWithValue("@cep", mkbcep.Text)
comando.Parameters.AddWithValue("@rua", txtrua.Text)
comando.Parameters.AddWithValue("@bairro", txtbairro.Text)
comando.Parameters.AddWithValue("@cidade", txtcidade.Text)
comando.Parameters.AddWithValue("@estado", txtestado.Text)
' comando.ExecuteNonQuery()
If comando.ExecuteNonQuery Then
MessageBox.Show("Registro salvo com sucesso ...")
Else
MessageBox.Show("Erro ao tentar gravar o registro ...")
End If
conn.Close()