我有一个具有以下结构的数据库表:
列: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数据库进行此操作。
有任何帮助吗?任何人?反馈深深感激。
答案 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周围放置一个包装器,以便格式良好......