如何在一DataTable中伪删除一DataRow(在线等待中....)

success_victory 2002-12-30 10:44:35
也就是说,如何清空DataTable的行状态为Deleted的行?
...全文
105 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
success_victory 2002-12-30
  • 打赏
  • 举报
回复
ok,thank you xhan2000.
原来DataRow 也有AcceptChanged。

再请教一个问题:
SqlDataAdapter的FillSchema是何意?能举例说明吗?
success_victory 2002-12-30
  • 打赏
  • 举报
回复
xhan2000:
我不能AcceptChanged,因为我有些新增的行需要保存到数据库中。
xhan2000 2002-12-30
  • 打赏
  • 举报
回复
acceptchange
GiantHard 2002-12-30
  • 打赏
  • 举报
回复
名为“Table”的 DataTable 添加到指定的 DataSet 中,并根据指定的 SchemaType 配置架构以匹配数据源中的架构。

[Visual Basic]
Overrides Overloads Public Function FillSchema( _
ByVal dataSet As DataSet, _
ByVal schemaType As SchemaType _
) As DataTable() Implements IDataAdapter.FillSchema
[C#]
public override DataTable[] FillSchema(
DataSet dataSet,
SchemaType schemaType
);
[C++]
public: DataTable* FillSchema(
DataSet* dataSet,
SchemaType schemaType
) [];
[JScript]
public override function FillSchema(
dataSet : DataSet,
schemaType : SchemaType
) : DataTable[];
参数
dataSet
要将架构插入其中的 DataSet。
schemaType
SchemaType 值之一,指定如何插入架构。
返回值
对添加到 DataSet 中的 DataTable 对象集合的引用。

实现
IDataAdapter.FillSchema

备注
此方法使用 SelectCommand 从数据源中检索架构信息。

FillSchema 操作将 DataTable 添加到目标 DataSet 中。然后,它向 DataTable 的 DataColumnCollection 中添加列,并且当数据源中存在以下 DataColumn 属性时配置这些属性:

AllowDBNull
AutoIncrement。您必须分别设置 AutoIncrementStep 和 AutoIncrementSeed。
MaxLength
ReadOnly
Unique
FillSchema 还根据以下规则配置 PrimaryKey 和 Constraints 属性:

如果 SelectCommand 返回一个或多个主键列,则它们被用作 DataTable 的主键列。
如果未返回主键列,但返回了唯一列,则当且仅当所有唯一列都不可为空时,唯一列才被用作主键。如果任何一列都可以为空,则将 UniqueConstraint 添加到 ConstraintCollection 中,但不设置 PrimaryKey 属性。
如果既返回了主键列又返回了唯一列,则主键列用作 DataTable 的主键列。
请注意,主键和唯一约束按照上述规则添加到 ConstraintCollection 中,但不添加其他约束类型。

主键信息在 Fill 过程中用来查找和替换其键列匹配的所有行。如果这不是所需的行为,请使用 Fill 而不请求架构信息。

如果 IDataAdapter 在填充 DataTable 时遇到重复列,它将以“columnname1”、“columnname2”、“columnname3”这种模式命名后面的列。如果传入数据包含未命名的列,它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时,每个结果集都放在一个单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名(例如“Table”、“Table1”、“Table2”等)。在应用程序中使用列名和表名时应小心,一定不要与这些命名模式发生冲突。

与 Select 命令关联的 IDbConnection 对象必须有效,但它不需要打开。如果调用 FillSchema 之前 IDbConnection 已关闭,则将其打开以检索数据,然后再将其关闭。如果调用 FillSchema 之前连接已打开,则它保持打开状态。

注意 当处理返回多项结果的批处理 SQL 语句时,OLE DB .NET 数据提供程序的 FillSchema 的实现只为第一项结果检索架构信息。若要为多项结果检索架构信息,请使用 MissingSchemaAction 设置为 AddWithKey 的 Fill。
当使用 FillSchema 时,SQL Server .NET 数据提供程序将 FOR BROWSE 子句追加到正在被执行的语句。用户应该注意潜在的副作用,例如与 SET FMTONLY ON 语句的使用产生冲突。有关更多信息,请参阅“SQL Server 联机图书”。

示例
[Visual Basic, C#] 以下示例使用派生类 OleDbDataAdapter 向 DataSet 中填充架构(具有数据的 DataTable 对象的数组),并将 OleDbParameterCollection 集合返回到 IDataParameter 对象的数组。此示例假定您已经创建了一个 OleDbDataAdapter 和一个 DataSet。

[Visual Basic]
Public Sub GetMyRecords()
' ...
' create myDataSet and myDataAdapter
' ...
Dim myTableArray As DataTable() = _
myDataAdapter.FillSchema(myDataSet, SchemaType.Mapped)
End Sub
[C#]
public void GetMyRecords() {
// ...
// create myDataSet and myDataAdapter
// ...
DataTable[] myTableArray = myDataAdapter.FillSchema(myDataSet,SchemaType.Mapped);
}
dy_2000_abc 2002-12-30
  • 打赏
  • 举报
回复
在使用 DataAdapter.Fill 方法后,DataTable 和 DataColumn 对象的多种属性(如主键、自动增加字段、可为空值字段、唯一索引等等)都没有设置。默认情况下运行时会针对只读情况优化 DataAdapter 对象。 Fill 方法只检索显示数据所需要的那些架构。 必须采取额外的步骤才能获取更新或验证对象所需的其他架构。
要获取有关 DataSet 对象的其他信息,可使用下面任一方法:
1. 调用 DataAdapter.FillSchema 方法来获取更多架构信息。
2. 在调用 Fill 方法前,将 DataAdapter.MissingSchemaAction 设置为 MissingSchemaAction.AddWithKey。
那么何时使用 FillSchema 方法,何时使用MissingSchemaAction 属性?
多次调用Fill()方法的情况下,比较适宜使用FillSchema(),如果使用MissingSchemaAction,那么在每次调用Fill()时架构都被重新设置。
如果使用多条SQL语句返回多个记录集时适宜使用MissingSchemaAction,因为FillSchema只返回第一个记录集的构架。另外,如果你只调用一次Fill()方法,适宜使用MissingSchemaAction。
如果你需要的是一个只读的DataSet时,两者都不要用,因为那是多余的。
如果你在设计时生成DataSet,两者都不要用,因为设计器已经生成架构了。
如果你打算从XML加载数据,并且希望使用XML的构架,两者都不要用。

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧