从.Net中的数据库中的记录创建文件

时间:2011-01-28 21:08:06

标签: c# .net xml file

我有一个具有以下结构的数据库表:

列:DealID(int),CustomerID(int),DocumentArchiveID(int),DealXML(XML字符串)

问题是:

CustomerID字段的值可以在表格中多次出现,但每次出现时,与之关联的DealXML都是唯一的。我需要连接到表并创建DealXML列中包含的XML文件 - 但每个CustomerID只有一个文件。所以基本上如果一个CustomerID出现5次,我需要创建一个包含该文件中所有相关DealXML数据的文件...如果CustomerID只出现一次,那么我创建一个文件,其中只有CustomerID的DealXML。所以在最后我需要每个CustomerID的唯一实例一个文件,但每个文件应该包含与该特定CustomerID相关联的所有DealXML数据。我完全失去了如何实现这一点,我正面临一个截止日期。

总结:需要为CustomerID的每个唯一实例创建一个文件(CustomerID可以在表中多次出现,每次都有一个需要进入文件的不同DealXML) - 每个文件都包含所有DealXML for the特别是CustomerID。

我想过用FileMode.Append创建一个FileStream,为数据库中的每个唯一CustomerID创建一个唯一的文件,但遗憾的是我无法控制我命名的文件(它们必须遵守我组织外部建立的约定)并且不能使用此方法创建唯一的文件(基于CustomerID),这是我的第一个想法。

我在.Net平台上使用C#和SQL Server 2008数据库进行此操作。

有任何帮助吗?任何人?反馈深深感激。

2 个答案:

答案 0 :(得分:2)

首先,您需要一个查询,以正确的顺序返回所有内容:

SELECT CustomerID, DealID, DealXML FROM TABLE ORDER BY CustomerID, DealID

接下来循环结果。每次遇到新的CustomerID时,只需创建一个新文件(使用您需要的任何约定)并编写xml(注意,您必须使用根元素包装所有DealXML值以创建格式良好的xml): / p>

<customerData>
     <DealXML />
     <DealXML />
     <DealXML />
</customerData>

编辑:你可以做这样的事情(这是一些草图代码 - 但这给你基本的想法)...基本的想法是你把交易xmls放到一个集合中,直到你转移到另一个客户ID。

int previousCustomerId = -1;

List<string> deals = new List<string>();

while(rs.ReadNext())
{
   int customerId = rs["CustomerID"];

   if (customerId != previousCustomerId)
   {
       //Don't do this on the first go
       if (customerId != -1)
       {

          //Generate a filename
          string filename = GenerateFileName(customerId);  

          //There are better ways to write multiple values to a file,
          //  but this should give you an idea of where to start.
          File.AppendText(filename, "<customerData>");

          //Dump all of the DealXML values to the file
          foreach(string deal in deals)
              File.AppendText(filename, deal);

          File.AppendText(filename, "</customerData>");
       }

       //Reinitialize the list
       deals = new List<string>();

       //Save the new customer id
       previousCustomerID = customerId;

   }

   deals.Add((string)rs["DealXML"]);
}

答案 1 :(得分:0)

嗯,蛮力的方法是查询不同的CustomerID。如果DealXML可以为空,则应select distinct CustomerID from table X where DealXML is not null

然后,遍历结果数据集。在每个循环中,查询DealXML以获取当前的客户ID。你将获得一个包含1行或更多行的数据集;打开一个新文件,循环通过数据集,然后追加到文件中。

你需要在每个客户的XML周围放置一个包装器,以便格式良好......