[英]"System.Data.OleDb.OleDbException: 'Cannot update. Database or object is read-only" Error while reading from .Dat file using C#
我正在尝试使用 Microsoft Jet Engine 提供程序读取 .Dat 文本文件,但得到“System.Data.OleDb.OleDbException:'无法更新。数据库或对象是只读的。'” ExcecuteReader 出现错误。 我的代码如下所示
public static void ReadDatFile()
{
var query = "select * from VehiclePositions.dat";
var connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Users\\lenovo\\source\\repos\\ConsoleApp1\\ConsoleApp1\\;Extended Properties='text;ReadOnly=False'");
connection.Open();
OleDbCommand command = connection.CreateCommand();
command.CommandText = query;
command.CommandType = System.Data.CommandType.Text;
var test=command.ExecuteReader();
while(test.Read())
{
Console.WriteLine(test[0]);
}
}
我尝试将 HDR=NO;FMT=FixedLength 添加到扩展属性,但问题仍然存在,我不确定我在这里缺少什么。
看来问题是由文件上的扩展名 .dat 引起的。
互联网上的一些研究给了我一个关于寻找什么的线索。 在注册表中,OleDb 使用的文本驱动程序查看以下键:
(注意 64 位操作系统中 32 位驱动程序使用的 WOW6432Node)
HKLM\SOFTWARE\WOW6432Node\Microsoft\Jet\4.0\Engines\Text\Extensions
在此注册表项中列出了文本驱动程序打开的文件所允许的扩展名。 默认的是
txt,csv,tab,asc
因此,如果您将该文件更改为VehiclePosition.txt ,那么它就可以工作。
或者您可以在注册表项的末尾添加,dat并且事件当前文件名将起作用。
当然,您的文件夹中应该有一个schema.ini ,您可以在其中添加以下行
[VehiclePositions.dat]
Format=FixedLength
ColNameHeader=False
Col1=F1 Text Width 8
Col2=F2 Text Width 4
Col.........
有关 Schema.ini 键和格式的完整描述,您可以参考此Microsoft 文档
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.