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

时间:2011-06-01 23:35:23

标签: c# .net datatable

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;
        }

当SAME文件命名为.csv时,它不会给我一个错误;但是,当我将其重命名为.log时,它会在Cannot update. Database or object is read-only.上显示adapter.Fill

这是编译错误吗?

3 个答案:

答案 0 :(得分:1)

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

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

解决方案:

  1. 在阅读时将文件重命名为临时文件夹
  2. 以JET(标准File.io.ReadAllLines)
  3. 的另一种机制来阅读它
  4. 按照antonio Bukala
  5. 的指示,在Windows注册表中添加扩展名

答案 1 :(得分:-1)

* .log已禁用扩展,AFAIK唯一的方式是在运行此代码的计算机上更改注册表,请参阅MS知识库article

答案 2 :(得分:-1)

不,这不是编译器错误。如果是OleDb Jet引擎的任何错误。我过去遇到过Jet的问题,所以我通常会避免它。使用TextFieldParser可以节省大量的调试时间。