c#datatable无法更新.数据库或对象是只读的
本文关键字:对象 只读 数据库 更新 c#datatable | 更新日期: 2023-09-27 17:58:17
private void Form1_Load(object sender, EventArgs e)
{
GetDataTable(@"C:'Documents and Settings'agordon'Desktop'ACTIVITYEX.log");
}
public System.Data.DataTable GetDataTable(string strFileName)
{
System.Data.OleDb.OleDbConnection conn =
new System.Data.OleDb.OleDbConnection
("Provider=Microsoft.Jet.OleDb.4.0; Data Source = "
+ System.IO.Path.GetDirectoryName(strFileName)
+ ";Extended Properties = '"Text;HDR=YES;FMT=TabDelimited'"");
conn.Open();
string strQuery = "SELECT * FROM [" + System.IO.Path.GetFileName(strFileName) + "]";
System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter(strQuery, conn);
System.Data.DataTable ds = new System.Data.DataTable("CSV File");
adapter.Fill(ds);
return ds;
}
当同一文件名为.csv
时,它不会给我错误;然而,当我将其重命名为.log
时,它在adapter.Fill
上显示Cannot update. Database or object is read-only.
这是编译器错误吗?
一篇旧帖子,但我刚刚遇到了这个问题。请参阅本文:https://support.microsoft.com/en-us/kb/245407
长话短说:Jet Engine在读取CSV文件时只接受一些文件扩展名(扩展属性=TEXT等(。
解决方案:
- 读取临时文件夹时重命名文件
- 使用JET之外的另一种机制(标准File.io.ReadAllLines(读取它
- 在windows注册表中添加antonio Bukala指出的扩展名
*.log是禁用的扩展,AFAIK唯一的方法是在将运行此代码的机器上更改注册表,请参阅MS知识库文章