这有什么问题?
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中对我的数据库执行查询吗?
答案 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
答案 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包含单引号的可能性,这有点令人讨厌,但出于测试/开发的目的,它可以正常工作。