插入OLEDB VB.NET

时间:2012-12-18 11:36:48

标签: database vb.net insert oledb

这有什么问题?

da.InsertCommand = New OleDb.OleDbCommand("Insert Into Table1 Values( 1, '" & TextBox1.Text & "')")
da.InsertCommand.Connection = con
con.Open()
da.Update(ds)
con.Close()

无论如何,数据库永远不会更新。 或者有更好的方法插入数据库?我已经尝试过CommandBuilder,但它似乎也没有用。 或者我可以直接在VB.NET中对我的数据库执行查询吗?

3 个答案:

答案 0 :(得分:3)

您对DataAdapter.Update的作用有点困惑。 更新可以将InsertCommand,UpdateCommand,DeleteCommand应用于DataSource中存在的每个已添加,已修改或已删除的行(假设ds是数据集)。
它不会自己添加/删除/更新记录到数据库。

如果要将记录添加到数据库,则应编写(伪)代码,如此

Using con = GetConnection()
Using cmd = new con.CreateCommand()
    cmd.CommandText = "Insert Into Table1 Values( 1, ?)"
    cmd.Parameters.AddWithValue("@param1", textbox1.Text)
    cmd.Connection = con
    con.Open()
    cmd.ExecuteNonQuery()
End Using
End Using

请注意使用Using语句确保关闭并处理连接和命令。此外,永远不要连接字符串来构建sql命令。使用参数可以避免解析问题和SQLInjection攻击。

编辑:根据您在下面的评论,并假设Table1的第一列是自动编号字段,您可以这样更改代码

Using con = GetConnection()
Using cmd = new con.CreateCommand()
    cmd.CommandText = "Insert Into Table1 Values(?)"
    cmd.Parameters.AddWithValue("@param1", textbox1.Text)
    cmd.Connection = con
    con.Open()
    cmd.ExecuteNonQuery()
End Using
End Using

此外,对于“未添加任何内容”的问题,我认为您的项目中包含数据库文件(mdb),并且属性Copy To The Output Directory设置为Copy Always

请参阅MSDN at this page

的详细说明

答案 1 :(得分:0)

是的,因为您还没有尝试过运行非查询。请记住,SELECT语句是一个查询语句,而INSERT,UPDATE,DELETE是非查询语句。 da.Update()或da.Fill()只会从查询操作中提取结果。

在打开连接之后,需要添加一个额外的行作为da.ExecuteNonQuery()或在VB.NET中执行非查询语句的任何语句!

~Shakir Shabbir

答案 2 :(得分:0)

干净整洁......

Using oCmd As New OleDbCommand("Insert Into Table1 Values(1, '" & TextBox1.Text & "')", con)
    oCmd.ExecuteNonQuery()
End Using

由于SQL Injection或Textbox1.Text包含单引号的可能性,这有点令人讨厌,但出于测试/开发的目的,它可以正常工作。