我试图从Access数据库中读取一个表,然后将该表中的数据排序为多个文本文件.关键是要写入的文件名取决于每条记录中的值.这是我的第一个C#应用程序,所以你可以认为我是"绿色".我还应该提一下,我正在使用Access数据库,直到我能够得到代码,最终它将从拥有数百万条记录的SQL服务器中提取出来.
我现在有代码工作,但问题是有大量的文件打开/关闭操作.我想只打开一次文件,因为它会将这些文件写入网络驱动器.这本质上是一个在服务器上运行的粘合应用程序 - 所以还有一些其他限制 - 我无法保存到本地驱动器然后复制到网络.我无法在拉动之前对查询进行排序.运行时我无法对服务器资源产生负面影响.
可能最好的方法是使用哈希表.检查文件是否已打开,如果没有,请将其打开并将文件句柄保存在哈希表中.完成后立即关闭它们.但是,我找不到如何同时使用多个StreamWriter对象的示例.
我期望找到相对容易的答案,但我似乎找不到他的解决方案.我怀疑StreamWriter是用于此的错误类.
我能找到的最接近的上一个问题来自CodeProject页面.在那个页面上,他们说保持文件开放的做法很糟糕,应该避免,但页面不解释原因,也不提供示例替代方案.有人建议将整个数据集加载到内存中,然后对其进行操作,但这对我来说不是一个选项,因为表中会有太多数据.
这是我到目前为止所拥有的.
String strConnection;
String strQuery;
String strPunchFileNameTemplate;
// Define our Variables
strConnection = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=ClockData.accdb";
strQuery = @"SELECT * FROM ClockPunches";
strPunchFileNameTemplate = @"C:\PUNCHES\%READER%.TXT";
// OleDbConnection implements iDisposable interface, so we must scope out its usage.
// Set up Connection to our data source
using (OleDbConnection ConnObj = new OleDbConnection(strConnection)) {
// Create a Command with our Query String
OleDbCommand CmdObj = new OleDbCommand(strQuery,ConnObj);
// Open our …Run Code Online (Sandbox Code Playgroud)