# WnDataSource > 数据源对象,用于与数据库进行交互。WnDataSource对象在调用模块主窗体的`Assemble`方法时装载,配置信息来源于`窗体界面设计`的数据源配置信息。 ## 主要属性 WnDataSource主要有以下两个属性: |属性|说明| |-|-| |KeyValues|类型为Hashtable,关键字集合,用于替换数据集中的关键字| |DataSets|类型为Hashtable,存储获取到的DataSet对象| > KeyValues中数据的来源 > - 可以在写代码的时候通过`wnDataSource.KeyValues["xxx"]=xxx`的方式赋值 > - 通过方法参数传递的关键字也会添加到KeyValues中 ## 主要方法 WnDataSource主要有以下几个方法: ```csharp public Hashtable GetDataSet(Hashtable ht); public Hashtable ExecSql(Hashtable ht); public Hashtable UpdateDataSet(Hashtable ht); public Hashtable RemoveDataSet(Hashtable ht); ``` ### GetDataSet > 该方法是执行select语句,从数据库获取数据。获取的数据以DataSet的形式保存在DataSets属性中。 **方法参数** 参数是一个Hashtable,主要包含以下固定项: |键|是否必须|说明| |-|-|-| |DataSetName|必须|数据集名称,程序将根据该名称获取要执行的SQL语句| |FacadeAlias|非必须|应用层别名,配置后将会到指定的应用层获取数据| |TableNames|非必须|获取数据集的所有表可以不传;获取一个表的数据传递对应表名即可;获取多个表则传递对应表名的数组| **返回值** 返回值是一个Hashtable,主要包含以下项 |键|说明| |-|-| |IsSuccess|数据集执行是否成功,“1”表示成功,“0”表示失败| ### ExecSql > 该方法通过执行update和delete语句来与数据库进行交互。 **方法参数** 参数是一个Hashtable,主要包含以下固定项: |键|是否必须|说明| |-|-|-| |DataSetName|必须|数据集名称,程序将根据该名称获取要执行的SQL语句| |FacadeAlias|非必须|应用层别名,配置后将会到指定的应用层执行SQL语句| **返回值** 返回值是一个Hashtable,主要包含以下项 |键|说明| |-|-| |IsSuccess|数据集执行是否成功,“1”表示成功,“0”表示失败| ### UpdateDataSet > 通过DataSet更新数据库。 **方法参数** 参数是一个Hashtable,主要包含以下固定项: |键|是否必须|说明| |-|-|-| |DataSetName|必须|数据集名称,程序将根据该名称获取要保存的DataSet| |FacadeAlias|非必须|应用层别名,配置后将会到指定的应用层保存数据| |TableNames|非必须|保存数据集的所有表可以不传;保存一个表的数据传递对应表名;保存多个表则传递对应表名的数组| |BeforeDataSetName|非必须|用于获取保存DataSet数据前要执行的SQL语句| |AfterDataSetName|非必须|用于获取保存DataSet数据后要执行的SQL语句| |ActionStep|必须|用于指明本次更新方法要执行哪些动作| **ActionStep** > `ActionStep`是一个`List`的泛型,`Act`是我们自己封装的一个枚举类型,包含多个动作。 Act主要包含以下动作: |动作|说明| |-|-| |CommitEdit|提交数据,将调用与DataSet中DataTable通信的WnGrid对象的CommitEdit方法| |AskIsUpdate|询问是否保存,如果有数据修改则提示询问是否保存,根据选择将对返回结果的`IsUpdate`赋值| |HandleData|排序,给`是否顺序列`为1的列赋值| |CheckData|检查必录项是否为空| |SaveData|保存数据| |ShowSuccess|提示成功,现基本上不用| **返回值** 返回值是一个Hashtable,主要包含以下项 |键|说明| |-|-| |IsSuccess|数据集执行是否成功,“1”表示成功,“0”表示失败| |IsChanged|数据是否发生修改,“0”表示没修改,“1”表示修改| |IsUpdate|数据是否保存,“-1”表示取消,此时IsSuccess设为“1”,“0”表示不保存,此时IsSuccess设为“1”,“1”表示保存| |IsEmpty|是否有必录项为空,“0”表示没有,“1”表示有| |EmptyDataSetName|必录项为空的数据集的名称| |EmptyTableName|必录项为空的表名| |EmptyColumnName|必录项为空的列名| ### RemoveDataSet > 该方法是从DataSets对象中把指定的表设为null。如果存在表间关系,则应提前把表间关系给移除掉。 **方法参数** 参数是一个Hashtable,主要包含以下固定项: |键|是否必须|说明| |-|-|-| |DataSetName|必须|数据集名称,是DataSets对象的键| |FacadeAlias|非必须|应用层别名,如果配置将与DataSetName拼接作为DataSets对象的键| |TableNames|非必须|要设置为null的表名,不传则整个DataSet所有的表都设置为null| **返回值** 返回值是一个Hashtable,主要包含以下项 |键|说明| |-|-| |IsSuccess|执行是否成功,“1”表示成功,“0”表示失败|