-1

这有什么问题?

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 中对我的数据库执行查询吗?

4

3 回答 3

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 上的详细说明

于 2012-12-18T12:10:52.190 回答
0

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

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

~夏基尔·沙比尔

于 2012-12-18T11:43:53.800 回答
0

干净整洁...

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

这有点讨厌,因为 SQL 注入或 Textbox1.Text 可能包含单引号,但出于测试/开发目的,它会起作用。

于 2012-12-18T12:10:22.627 回答