ADO.NET操作数据库小问题

我要修改TreeInfo.accdb数据库中的TreesList数据表中的“details”字段,有错误,请帮忙指出错误ImportsSystem.Data.OleDbP... 我要修改TreeInfo.accdb数据库中的TreesList数据表中的“details”字段,
有错误,请帮忙指出错误
Imports System.Data.OleDb
Public Class Form1
Public p_DBName As String '数据库文件名(包括路径)
Public p_DBcnn1 As New OleDbConnection '定义数据库链接
Public p_DBAdapter1 As New OleDbDataAdapter
Public p_DBcmd1 As New OleDbCommand
Public p_DBset1 As New DataSet
Public p_DBtable1 As New DataTable
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

p_DBName = Application.StartupPath & "\TreesInfo.accdb" '数据库路径
p_DBcnn1.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & p_DBName & ";" '数据库连接字符串
If p_DBcnn1.State = ConnectionState.Closed Then '如果是关闭状态,就打开之
p_DBcnn1.Open()
End If
p_DBcmd1.Connection = p_DBcnn1 '数据库连接
p_DBcmd1.CommandType = CommandType.Text '命令类型

Dim s_SQLstr As String = "select * from TreesList " 'SQL语句
p_DBcmd1.CommandText = s_SQLstr

p_DBAdapter1.SelectCommand = p_DBcmd1
p_DBAdapter1.Fill(p_DBset1, "TreesList")

Dim DBrow1 As DataRow

For Each DBrow1 In p_DBset1.Tables("TreesList").Rows
'dbrow1.BeginEdit()
DBrow1("details") = "aaaaa"
'dbrow1.EndEdit()
Next
p_DBAdapter1.Update(p_DBset1, "treeslist") '在这里提示错误:当传递具有已修改行的 DataRow 集合时,更新要求有效的 UpdateCommand
p_DBset1.AcceptChanges()
MessageBox.Show("OK")
End Sub
End Class
提示错误:当传递具有已修改行的 DataRow 集合时,更新要求有效的 UpdateCommand
我已经用注释标在代码里了
展开
 我来答
daxia1998
2010-11-10 · 超过24用户采纳过TA的回答
知道答主
回答量:65
采纳率:0%
帮助的人:0
展开全部
晕了。
你不生成 updacommand 是不能直接用他的修改的。
少的东东了
-------
你在For Each DBrow1 In p_DBset1.Tables("TreesList").Rows
'dbrow1.BeginEdit()
DBrow1("details") = "aaaaa"
'dbrow1.EndEdit()
Next
---------
看你意思,你同时修改了多行,
只能用
下面的了
-------------
你在msdn中找下面的类。
注意 oracle 找oracle, sqlserver, 找对应的版本的。
《使用 CommandBuilder 生成命令 (ADO.NET)》

这个要求select语句的表 中有标识列。没有就做不到
----------------------

DbCommandBuilder 类
成员 请参见 发送反馈意见

自动生成用于协调 DataSet 的更改与关联数据库的单表命令。这是一个只能被继承的抽象类。

命名空间: System.Data.Common
程序集: System.Data(在 System.Data.dll 中)

语法
Visual Basic(声明)
Public MustInherit Class DbCommandBuilder _
Inherits Component

Visual Basic(用法)
Dim instance As DbCommandBuilder

C#
public abstract class DbCommandBuilder : Component

Visual C++
public ref class DbCommandBuilder abstract : public Component

J#
public abstract class DbCommandBuilder extends Component

JScript
public abstract class DbCommandBuilder extends Component

备注
提供 DbCommandBuilder 类是为了方便提供程序编写者创建自己的命令生成器。通过继承此类,开发人员可在自己的代码中实现提供程序特定的行为。

DbDataAdapter 不会自动生成为了使对 DataSet 所作的更改和相关联的数据源协调起来所必须的 SQL 语句。但是,如果设置了 DbDataAdapter 的 SelectCommand 属性,就可以创建 DbCommandBuilder 对象来自动生成 SQL 语句进行单表更新。然后,DbCommandBuilder 将生成其他任何未设置的 SQL 语句。

每当设置了 DataAdapter 属性,DbCommandBuilder 就将其本身注册为 RowUpdating 事件的侦听器。一次只能将一个 DbDataAdapter 与一个 DbCommandBuilder 对象(或相反)互相关联。

为了生成 INSERT、UPDATE 或 DELETE 语句,DbCommandBuilder 会自动使用 SelectCommand 属性来检索所需的元数据集。如果在检索元数据后(例如在第一次更新后)更改 SelectCommand,则应调用 RefreshSchema 方法来更新元数据。

SelectCommand 还必须至少返回一个主键列或唯一的列。如果什么都没有返回,就会产生 InvalidOperationException 异常,不生成命令。

DbCommandBuilder 还使用由 SelectCommand 引用的 Connection、CommandTimeout 和 Transaction 属性。如果修改了任何这些属性或者替换了 SelectCommand 本身,用户则应调用 RefreshSchema。否则,InsertCommand、UpdateCommand 和 DeleteCommand 属性都保留它们以前的值。

如果调用 Dispose,则会解除 DbCommandBuilder 与 DbDataAdapter 的关联,并且不再使用生成的命令。
月光光1234
2010-11-06 · TA获得超过322个赞
知道小有建树答主
回答量:303
采纳率:0%
帮助的人:115万
展开全部
报的什么错啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lingjia75
2010-11-07
知道答主
回答量:60
采纳率:0%
帮助的人:18.5万
展开全部
把错贴上来看看,哪有这样让人看的?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式