数据集是数据的内存驻留表示形式,提供与数据源无关的一致关系编程模型。 数据集表示一组完整的数据,包括表、约束和表之间的关系。 由于数据集独立于数据源,因此数据集可以包含应用程序的本地数据,以及来自多个数据源的数据。 与现有数据源的交互通过DataAdapter
对象进行控制。
该 HostfileDataAdapter.SelectCommand
属性是一个 HostFileCommand
从数据源检索数据的对象。
HostFileDataAdapter.Fill
方法用于将 SelectCommand
的结果填充到数据集中。
Fill
的参数包括一个要填充的DataSet
对象,以及一个DataTable
对象或要填充的DataTable
名称,填充内容为从SelectCommand
返回的行。
该方法 Fill
隐式使用 HostFileDataReader
对象返回用于在对象中创建表的 DataSet
列名和类型,以及用于填充对象中 DataSet
表行的数据。 表和列仅在不存在时才创建;否则, Fill
将使用现有的 DataSet
架构。 除非主键位于数据源中,否则不会创建主键,并且 HostFileDataAdapter.MissingSchemaAction
设置为 MissingSchemaAction.AddWithKey
。 如果 Fill
发现表格中存在主键,那么对于主键列值与数据源返回的行相匹配的行,它会使用数据源中的数据覆盖 DataSet
对象中的数据。 如果未找到主键,则数据将追加到对象中的 DataSet
表。
Fill
在填充 DataSet
对象时会使用可能存在的任何映射。
HostFileDataAdapter
如果遇到多个结果集,它会在DataSet
对象中创建多个表。 表的增量默认名称为 TableN,从 Table0 的“Table”开始。 如果将表名作为参数 Fill
传递给该方法,则表将给定 TableNameN 的增量默认名称,以 TableName0 的“TableName”开头。
可以将任意数量的 HostFileDataAdapter
对象与 DataSet
对象一起使用。 每个 DataAdapter
对象都可用于填充一个或多个 DataTable
对象,并将更新解析回相关数据源。 可以向DataSet
本地添加DataRelation
和Constraint
对象,使你能够关联不同数据源中的数据。 一个或多个 DataAdapter
对象可以处理与每个数据源的通信。
将数据适配器中的数据填充至主机文件数据集中
使用
HostFileConnection
创建新的数据源连接。使用
HostFileConnection.Open
打开连接。创建一个用于描述要检索数据的 SELECT 命令
HostFileCommand
。创建一个
HostFileDataAdapter
使用HostFileConnection
与存储的数据交互。创建一个
DataSet
对象以在本地存储数据。使用
HostFileDataAdapter
DataSet
对象和Fill
命令检索数据。
示例:
下面的代码示例演示如何通过 HostFileDataAdapter
填充数据集。 在此示例中,ETCMLogging 和 HostFileUtils 对象分别提供日志记录和实用工具功能。
public void HFDAdapterCommandConstructor(ETCMLogging.Logging logging, string host, string ccsid, string cnstring, HostFileUtils.Utils.HostFileType hostfiletype)
{
HostFileUtils.Utils u = new HostFileUtils.Utils();
logging.LogInfo(host + "::" + hostfiletype.ToString());
HostFileUtils.Utils.MytestsVals[] Datavals = u.InitMytestsVals();
try
{
HostFileConnection cn = new HostFileConnection(cnstring);
cn.Open();
String SELECT = u.CreateSQLCommand(host, hostfiletype, cnstring, "SELECT", "MYTEST");
HostFileCommand hfc = new HostFileCommand(SELECT, cn);
HostFileDataAdapter hfda = new HostFileDataAdapter(hfc);
DataSet ds = new DataSet();
hfda.Fill(ds);
int[] cp = u.CheckColumns(SELECT, cn, logging);
u.ValidateDataSet(ds, logging, Datavals, cp);
cn.Close();
}
catch (Exception e)
{
logging.LogInfo(e.Message);
logging.LogFail(e.StackTrace);
}
}
在此代码示例中, HostFileUtils
对象和 cnstring
参数 ccsid
使你能够快速创建包含相关信息的测试 SQL 命令。