to:   gowhcy(gowhcy) ( ) 信誉:100 "查询中包括了主键"我一开始是没设主键,也提示出错,什么我忘了,后来人家说要加主键,我加了以后,就提示是这个错了,不知道接下来该怎么改了,

解决方案 »

  1.   

    OleDbDataAdapter modiDataAdapter = new OleDbDataAdapter();
    是不是为:
    OleDbDataAdapter modiDataAdapter = new OleDbDataAdapter(modiCommand);
    你看看,我用sql server 2k中定义DataAdapter是要求有一个SelectCommand的!
    你试试!
      

  2.   

    OleDbCommandBuilder modiCommandBuilder = new OleDbCommandBuilder(modiDataAdapter);
    建议你不要使用自动生成命令!你自己写update命令!然后自己给参数设置DataSourceColumn和DataRowVersion!
      

  3.   

    1.你是网络版吧要用事务,如下
    lj.Open();
    bool allok=false;//是否成功
    while(allok==false)
    {
    System.Data.SqlClient.SqlTransaction tr=lj.BeginTransaction();
    try
    {
    sqlcom1.CommandText="insert into ...";
    sqlcom1.Transaction=tr;
    sqlcom1.ExecuteNonQuery();
    }
    tr.Commit();
    allok=true;
    }
    catch
    {
    tr.Rollback();
    }
    }
    lj.Close();
    数据适配器和这一样。
    2.是不是你在创建数据适配器时有表联接啊(你给的程序中没有)
    如果出现selectcommand中 出现inner join,left join之类的,会回写不成功的。
    这个情况更复杂.
      

  4.   

    在数据库中设主键
    要不然就用datatable.primerykey=...
      

  5.   

    自动生成的语句有问题,update命令Where 后面的参数,需要设置DataRowVersion
      

  6.   

    OleDbConnection modiConneciton = new....;
    OleDbCommand modiCommand = new OleDbCommand("select * from table1",modiConnection);
    OleDbDataAdapter modiDataAdapter = new OleDbDataAdapter();
    modiDataAdapter.SelectCommand = modiCommand;//少了这句吧?
    OleDbCommandBuilder modiCommandBuilder = new OleDbCommandBuilder(modiDataAdapter);
    DataSet modiDataSet = new DataSet();modiConnection.Open();
    modiDataAdapter.Fill(modiDataSet,"modiTable");
    modiDataSet.Tables["modiTable"].Rows[0][1] = "modi";  //Row[0][1]是肯定存在的
    modiDataAdapter.UPdate(modiDataSet,"modiTable");
      

  7.   

    to:  回复人: zhpsam109(孤寂无边) ( ) 信誉:100 大哥,我已经加你了呀,上午就是我在问你,
    如果不用自动生成的话,因为我是动态字段,自己生成语句比较麻烦,
    不知道有没更好的解决办法,急
      

  8.   

    to:  回复人: qimini(循序渐进) ( ) 信誉:106 源码是我现在临时写的没测试,我可以肯定,之类的语句是不会少的,就算少了,应该也不会是提示这个
      

  9.   

    我在本机试了一下,没有发生你所说的问题(开发环境VS2003EN+MDAC2.8)。或者,也许你可以看看MSDN以下的关于OleDbDataAdapter的解释:(OleDbDataAdapter 充当 DataSet 和数据源之间用于检索和保存数据的桥接器。OleDbDataAdapter 通过以下方法提供这个桥接器:使用 Fill 将数据从数据源加载到 DataSet 中,使用 Update 将 DataSet 中所作的更改发回数据源。当 OleDbDataAdapter 填充 DataSet 时,它将为返回的数据创建必需的表和列(如果它们还不存在的话)。但是,除非 MissingSchemaAction 属性设置为 AddWithKey,则这个隐式创建的架构中就将不包括主键信息。也可以使用 FillSchema,让 OleDbDataAdapter 创建 DataSet 的架构,并在用数据填充它之前就将主键信息包括进去。有关更多信息,请参见向 DataSet 添加现有约束。请注意,包括 MSDataShape 提供程序在内的某些 OLE DB 提供程序并不返回基表或主键信息。其结果是,OleDbDataAdapter 不能为任何已创建的 DataTable 正确地设置 PrimaryKey 属性。在这种情况下,应该显式指定 DataSet 中表的主键。OleDbDataAdapter 还包括 SelectCommand、InsertCommand、DeleteCommand、UpdateCommand 和 TableMappings 属性,以便于数据的加载和更新。当创建 OleDbDataAdapter 的实例时,属性都设置为其初始值。有关这些值的列表,请参见 OleDbDataAdapter 构造函数。)