0

我正在创建一个应用程序,它每天从 SQL 数据库加载一次数据并将其保存到文本文件中。主表是一个“事务”表,其中包含有关当天进行的所有事务的数据。其中一列代表中间人呼号。我的程序首先将数据保存在 DataTable 中,然后使用 StringBuilder 我给它适当的形式,最后使用 StreamWriter 将其保存到文本文件中。

我的问题是,我如何或在流程的哪个阶段将一个表条目与另一个表条目区分开来。我想创建两个文件:一个包含中间人 A 和 B 进行的交易。到目前为止,这是我的代码:

// Query for Data

row = new SqlDataAdapter("SELECT [MSISDN], [Amount], [Transaction_ID], POS.[Name], MNO.[Call Sign] FROM"
                     + "[Transactions] join [POS] "
                     + "on Transactions.POS_ID = POS.idPOS "
                     + "join [MNO] on Transactions.MNO_ID = MNO.idMNO "
                     + "where [Status] = '1'", con);
row.Fill(Row);

// Save Data in StringBuilder

for (int i = 0; i < Row.Rows.Count; i++)
{
      sb.Append(Row.Rows[i].ItemArray[0].ToString()).Append(",");
      double amount = Convert.ToDouble(Row.Rows[i].ItemArray[1].ToString());
      sb.Append(Math.Round(amount, 2).ToString().Replace(",", ".")).Append(",");
      sb.Append(Row.Rows[i].ItemArray[2].ToString()).Append(",");
      sb.Append(Row.Rows[i].ItemArray[3].ToString()).Append(",");
    sb.Append(Row.Rows[i].ItemArray[4].ToString()).Append(",").Append(Environment.NewLine);
}


// Create a file from StringBuilder
mydocpath = @"C:\Transactions\" + fileDate.ToString(format) + ".txt";
FileStream fsOverwrite = new FileStream(mydocpath, FileMode.Create);
using (StreamWriter outfile = new StreamWriter(fsOverwrite))
{
       outfile.WriteAsync(sb.ToString());
}

希望我足够清楚。英语不是我的强项。以及为它看起来的编码......

4

1 回答 1

0

一种选择。

将所有数据放入 DataSet。然后针对 ds.GetXml() 进行 Xsl 转换。这是一个例子:

http://granadacoder.wordpress.com/2007/05/15/xml-to-xml-conversion/

但我要做的是完全消除 DataTable。使用 IDataReader。循环遍历数据。也许将原始查询作为“Order By Middle-Man-Identifer”,然后当 middleManIdentifer “跳转”时,关闭前一个文件并编写一个新文件。类似的东西。

你或许可以从这个演示中学到一些东西:

http://granadacoder.wordpress.com/2009/01/27/bulk-insert-example-using-an-idatareader-to-strong-dataset-to-sql-server-xml/

这是几个 IDataReader 助手:

http://kalit-codesnippetsofnettechnology.blogspot.com/2009/05/write-textfile-from-sqldatareader.html

如何在 C# 中有效地从 SQL 数据读取器写入文件?

于 2013-04-16T13:19:28.650 回答