都说 DATASET 相当于 离线数据库 ,为何 ACCESS 中的 自动编号列 填充到 DATASET 里, 新增记录 中却是 空 呢?因为我马上就要使用这个值,为空的话肯定是不行的。虽然有三个属性(AutoIncrement,AutoIncrementSeed,AutoIncrementStep)可以设置 Columns 为自动递增,设置起始值,步长值可以用。但是,我们在更新数据库的时候,自动编号列不是应该保持为空吗?还是新增记录的时候应该抛弃 离线 的做法?如果是多用户操作,我想离线新增确实是不安全的,但是对于单用户操作来说,应该不会有问题吧?
OleDbConnection conn = new OleDbConnection( "连接字符串 ");
OleDbCommand comm = new OleDbCommand( "SELECT @@IDENTITY ",conn);
利用“SELECT @@IDENTITY”命令可以得到数据库中新建记录时的自动编号
两位老大,这好像不是ACCESS里有的东西吧~~~
当使用 FillSchema 或将 MissingSchemaAction 设置为 AddWithKey 时,将需要在数据源中进行额外的处理来确定主键列信息。这一额外的处理可能会降低性能。如果主键信息在设计时已知,为了实现最佳性能,建议显式指定一个或多个主键列。有关为表显式设置主键信息的信息,请参阅为表定义主键。以下代码示例显示如何使用 FillSchema 向 DataSet 添加架构信息。[Visual Basic]
Dim custDS As DataSet = New DataSet()custDA.FillSchema(custDS, SchemaType.Source, "Customers")
custDA.Fill(custDS, "Customers")[C#]
DataSet custDS = new DataSet();custDA.FillSchema(custDS, SchemaType.Source, "Customers");
custDA.Fill(custDS, "Customers");以下代码示例显示如何使用 Fill 方法的 MissingSchemaAction.AddWithKey 属性向 DataSet 添加架构信息。[Visual Basic]
Dim custDS As DataSet = New DataSet()custDA.MissingSchemaAction = MissingSchemaAction.AddWithKey
custDA.Fill(custDS, "Customers")[C#]
DataSet custDS = new DataSet();custDA.MissingSchemaAction = MissingSchemaAction.AddWithKey;
custDA.Fill(custDS, "Customers");
DATASET保存的数据库副本,在未更新到数据库上的时候,保存了这些东西
1、数据库架构信息
2、副本1:原本通过SELECT从数据库读来的数据,未经修改
3、副本2:副本1的基础上,修改之后的数据,有新增的,修改的,删除的。并且每一条记录都有一个属性来说明这条记录有没有被修改,是不是新增的,有没有被删除。在更新数据库的时候,DataAdapter会用UPDATE,DELETE,INSERT这三个命令把标记号的记录一条一条地更新到数据库里。比如说,有三条打了 新增 标记的记录,则更新的时候就会用 INSERT 命令把这三条记录全部记录到数据库中。另外,由于有 自增列 这种情况,我猜测这些操作标记一定还有一个先后顺序的记录,因为在数据库中插入记录时 自增列 是跟顺序有关的。