主要问题是 Jet DBMS 是一个 32 位库,它会被加载到调用进程中,因此您永远无法在 64 位模式下直接从应用程序中使用 Jet。正如 Tim 提到的,您可以编写自己的 csv 解析器,但由于这是一个收缩包装应用程序,您需要能够处理更广泛格式的东西。幸运的是,有多种方法可以使用 32 位应用程序,因此您仍然可以通过技巧使用 Jet。
我会编写一个标记为仅在 32 位模式下运行的小 exe。此 exe 将采用要读取的文件名和要写入的临时文件名的命令行参数。我会使用 Jet 加载 csv/xls,然后将数据放入数组数组中,然后使用 xml 序列化程序将数据写入临时文件。
然后,当我需要加载/转换 csv/xls 文件时,我会执行以下操作:
object[][] ConvertFile(string csvOrXlsFile)
{
var output = System.IO.Path.GetTempFileName();
try
{
var startinfo = new System.Diagnostics.ProcessStartInfo("convert.exe",
string.Format("\"{0}\" \"{1}\"", csvOrXlsFile, output));
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = startinfo;
proc.Start();
proc.WaitForExit();
var serializer = new System.Xml.Serialization.XmlSerializer(typeof(object[][]));
using (var reader = System.IO.File.OpenText(output))
return (object[][])serializer.Deserialize(reader);
}
finally
{
if (System.IO.File.Exists(output))
System.IO.File.Delete(output);
}
}