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.

这是编译器错误吗?

c#datatable无法更新.数据库或对象是只读的

一篇旧帖子,但我刚刚遇到了这个问题。请参阅本文:https://support.microsoft.com/en-us/kb/245407

长话短说:Jet Engine在读取CSV文件时只接受一些文件扩展名(扩展属性=TEXT等(。

解决方案:

  1. 读取临时文件夹时重命名文件
  2. 使用JET之外的另一种机制(标准File.io.ReadAllLines(读取它
  3. 在windows注册表中添加antonio Bukala指出的扩展名
不,这不是编译器错误。如果有什么不同的话,那就是OleDb Jet引擎的错误。我在过去遇到过很多Jet问题,所以我通常会避免它。使用TextFieldParser可以节省大量调试时间。

*.log是禁用的扩展,AFAIK唯一的方法是在将运行此代码的机器上更改注册表,请参阅MS知识库文章