不能加m_RBookDst.AcceptChanges();
加了话你新加的行的状态就不是Add.所以并不会在数据库增加一条记录。
你说不加会出错误,把错误代码贴出来.

解决方案 »

  1.   

    还有,看样子,你数据库中的表字段名是用中文的吧。强列建意用英文。
    赋值建议: nr[0]=txtISBN.Text.Trim();
    nr[1]=txtBookName.Text.Trim();
    nr[2]=txtPublisher.Text.Trim();
             nr[3]=txtAuthor.Text.Trim();
    nr[4]=txtUPrice.Value;
    nr[5]=txtQuantity.Value;
    nr[6]=DTPubDate.Value;
    nr[7]=ComNCat.Text;
    nr[8]=CombWCat.Text;这样速度会快些,而且你以后字段名改了,也不用改程序,但维护性不好。
      

  2.   

    adp.Update(dst,"RBookDetail");//这句出错。
    未处理的“System.Data.OleDb.OleDbException”类型的异常出现在 system.data.dll 中。
      

  3.   

    还有个问题:如何用 CommandBuilder对象为dataAdapter对象自动生成SelectCommand,UpdateCommand,InsertCommand,DeleteCommand?
      

  4.   

    不好意思,adp.Update(dst,"RBookDetail");这句打错了,改为adp.Update(m_RBookDst,"RBookDetail");
      

  5.   

    你看一下,dst中是否有表"RBookDetail",如果没有,当然要错。   .NET 框架类库   SqlDataAdapter.SelectCommand 属性  [C#]请参见
    SqlDataAdapter 类 | SqlDataAdapter 成员 | System.Data.SqlClient 命名空间 | DeleteCommand | InsertCommand | UpdateCommand 
    要求
    平台: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows .NET Server family
    语言
    C#C++JScriptVisual Basic全部显示
    获取或设置一个 Transact-SQL 语句或存储过程,用于在数据源中选择记录。[Visual Basic]
    Public Property SelectCommand As SqlCommand
    [C#]
    public new SqlCommand SelectCommand {get; set;}
    [C++]
    public: __property SqlCommand* get_SelectCommand();
    public: __property void set_SelectCommand(SqlCommand*);
    [JScript]
    public function get SelectCommand() : SqlCommand;
    public function set SelectCommand(SqlCommand);
    属性值
    在 Fill 过程中使用的 SqlCommand,用来从数据库中为 DataSet 中的位置选择记录。备注
    当 SelectCommand 分配给以前创建的 SqlCommand 时,将不会克隆该 SqlCommand。SelectCommand 维护对以前创建的 SqlCommand 对象的引用。如果 SelectCommand 不返回任何行,则没有任何表添加到 DataSet 中,并且不会引发任何异常。示例
    [Visual Basic, C#] 下面的示例创建一个 SqlDataAdapter 并设置它的一些属性。[Visual Basic] 
    Public Sub CreateSqlDataAdapter()
        Dim myDataAdapter As New SqlDataAdapter()
        myDataAdapter.SelectCommand.CommandText = "SELECT * FROM Categories ORDER BY CategoryID"
        myDataAdapter.SelectCommand.Connection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind")
        myDataAdapter.UpdateCommand.CommandText = "UPDATE Categories SET Description='Cheeses, Milk, Ice Cream' WHERE CategoryName='Dairy Products'"
        myDataAdapter.UpdateCommand.Connection = CType(myDataAdapter.SelectCommand.Connection, SqlConnection)
    End Sub 'CreateSqlDataAdapter
    [C#] 
    public void CreateSqlDataAdapter() {
        SqlDataAdapter myDataAdapter = new SqlDataAdapter();
        myDataAdapter.SelectCommand.CommandText = "SELECT * FROM Categories ORDER BY CategoryID";
        myDataAdapter.SelectCommand.Connection = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind");
        myDataAdapter.UpdateCommand.CommandText = "UPDATE Categories SET Description='Cheeses, Milk, Ice Cream' WHERE CategoryName='Dairy Products'";
        myDataAdapter.UpdateCommand.Connection = (SqlConnection) myDataAdapter.SelectCommand.Connection;
    }
    [C++, JScript] 没有可用于 C++ 或 JScript 的示例。若要查看 Visual Basic 或 C# 示例,请单击页左上角的语言筛选器按钮 。要求
    平台: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows .NET Server family请参见
    SqlDataAdapter 类 | SqlDataAdapter 成员 | System.Data.SqlClient 命名空间 | DeleteCommand | InsertCommand | UpdateCommand 
      

  6.   

    版定之后直接 update(),我都试过n 次了。
      

  7.   

    看看你的Adapter的UpdateCommand属性的CommandText,如果要用Commandbuilder的话,帮助里就有例子,或者用commandbuilder的GetUpdateCommand方法生成一个Command,然后把这个command赋值给Adapter的updateCommand