我想从远程电脑上读取dbase文件。问题是这会产生很多文件句柄。
这是执行此操作的代码示例。我在一个线程中做,因为我想同时读取更多并行文件。
using (OleDbConnection oleCon = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;OLE DB Services=-4;Data Source=\\XXX\d$\dBaseFiles\;Extended Properties=dBase IV;"))
{
oleCon.Open();
Console.WriteLine("Con open! {0}", oleCon.State);
OleDbCommand query = new OleDbCommand("select * from rail", oleCon);
while (Console.ReadKey().KeyChar != 'e')
{
new Thread(() =>
{
using (IDataReader dr = query.ExecuteReader())
{
while (dr.Read())
Console.WriteLine(dr["data"]);
dr.Close();
}
}).Start();
}
Console.ReadKey();
oleCon.Close();
Console.WriteLine("con close! {0}", oleCon.State);
Console.ReadKey();
}
螺纹结束时,手柄永远不会关闭。问题出在哪儿?有谁回答我怎么解决这个问题!?
答案 0 :(得分:0)
首先:您没有使用BDE,而是使用OLE DB(特别是Jet)。 第二:你在while循环中反复启动线程执行相同的查询!资源不是无限的:)你应该设置并行数据读取器的限制(例如,每次f.e。)