SSIS2012 ScriptTask之C#代码——数据分层的对象模型以及基于对象的序列化XML

浏览: 2362

开篇介绍

适用场景:比如将平面文件大型机的数据填充到完全分层的数据模型中,然后将数据序列化到一个对象结构中,生成一个外部应用程序共享的文件格式类型。

这样说可能比较抽象,下面示例说话

实现方式

1.连接管理用ADO.NET连接SQL Server 方式,这里以AdventureWorks数据库中Product表为例

 Clipboard Image.png

2.拖一个ScriptTask控件,双击,点击编辑,添加相关命名空间以及Product类代码。

    using System.Data.SqlClient;\\连接sql server的类库

using System.Xml.Serialization;\\xml序列化

using System.Collections.Generic; \\列表集合,泛型操作

using System.IO;\\文件系统操作
    [Serializable()]  // 指示一个类可以序列化
public class Product //Product数据模型结构
{
public string ProductID { get; set; }
public string Name { get; set; }
public string ProductNumber { get; set; }
public decimal ListPrice { get; set; }
}

3.Product类模型建好了,接下来是main()主函数中加入如下代码是实现。

     public void Main()
{
// TODO: Add your code here
//定义链接对象
SqlConnection sqlconn;
//定义命令字符串
string cmdString = "select top 5 ProductID,Name,ProductNumber,ListPrice from [Production].[Product]";
try
{
// 打开连接管理器连接AWDB(连接管理器名)
sqlconn = (SqlConnection)(Dts.Connections["AWDB"]).AcquireConnection(Dts.Transaction);
sqlconn = new SqlConnection(sqlconn.ConnectionString);
sqlconn.Open();
SqlCommand cmd = new SqlCommand(cmdString, sqlconn);
SqlDataReader dr = cmd.ExecuteReader();//读取数据赋值给dr
List<Product> arrayListProduct = new List<Product>();// 实例化Product类型的list对象,为了存放读取的Product
while (dr.Read())//一行行读取
{
Product pt = new Product();
pt.ListPrice = (decimal)dr["ListPrice"];
pt.Name = dr["Name"].ToString();
pt.ProductID = dr["ProductID"].ToString();
pt.ProductNumber = dr["ProductNumber"].ToString();
arrayListProduct.Add(pt);//存放读取的Product
}
StreamWriter sw = new StreamWriter("C:\\ProSSIS\\Data\\Ch09\\ProductXml.xml");//实例化文件流,写入文件
XmlSerializer ser = new XmlSerializer(typeof(List<Product>));//实例化Product类型list的Xml序列
ser.Serialize(sw, arrayListProduct);//把list里数据序列化后写入XML文档。
sw.Close();//关闭流
sw.Dispose();//释放流
sqlconn.Close();//关闭连接

}
catch
{
Dts.TaskResult = (int)ScriptResults.Failure;
throw;
}
Dts.TaskResult = (int)ScriptResults.Success;
}

 4.最终结果如图

Clipboard Image.png

Clipboard Image.png

执行包后,在C:\\ProSSIS\\Data\\Ch09路径自动生成了ProductXml.xml文件

Clipboard Image.png

总结

这篇文章知识点:1.ScriptTask中如何用调用连接管理器(也可以直接连数据库)以及数据库中的读取数据的几个内置对象操作方式。

                          2.XML序列化操作。

                          3.文件系统操作。

                          4.对象模型的思想。实例中的类只是简单的平面模型,还可以包含复杂结构的类结构,比如有课程集合的学生对象。

推荐 1
本文由 粽子job 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册