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

时间:2014-02-22 23:16:55

标签: sql database vb.net oledbcommand

所以我试图将字段添加到数据库中。它是.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字段,这会改变什么吗?

4 个答案:

答案 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()