C# 在C Winform get的旧版本中加载CSV文件

C# 在C Winform get的旧版本中加载CSV文件,c#,winforms,csv,C#,Winforms,Csv,我得到的程序能够将CSV和Excel文件加载到datagridview中。 除了CSV文件保留旧数据外,这一切都很好 例如,CSV文件有30个值。我将数据加载到datagridview,它工作正常。 我关闭应用程序,然后编辑CSV文件,删除26行。下一次我打开应用程序并加载文件时,它仍然会得到包含30个值的版本,即使该文件已不存在 为了清楚起见,我在记事本中打开并编辑了该文件,它可以按预期工作,但即使在记事本中编辑了它,我的Winform应用程序似乎也会加载以前的版本。即使我重命名了文件,它仍然

我得到的程序能够将CSV和Excel文件加载到datagridview中。 除了CSV文件保留旧数据外,这一切都很好

例如,CSV文件有30个值。我将数据加载到datagridview,它工作正常。 我关闭应用程序,然后编辑CSV文件,删除26行。下一次我打开应用程序并加载文件时,它仍然会得到包含30个值的版本,即使该文件已不存在

为了清楚起见,我在记事本中打开并编辑了该文件,它可以按预期工作,但即使在记事本中编辑了它,我的Winform应用程序似乎也会加载以前的版本。即使我重命名了文件,它仍然会获取不应该存在的数据。即使在完全重新启动电脑后,该文件仍保留不应存在的数据。 但是如果我将文件移动到另一个文件夹,添加新文件夹并将其扔到其中,它会加载新数据

编辑: 看起来它实际上正在加载文件夹中的所有CSV文件。包括旧版本

什么会导致这个问题?查看Excel文件时未遇到此问题

使用的代码:

    private void OpenExcel()
    {
        OpenFileDialog openFileDialog1 = new OpenFileDialog
        {
            InitialDirectory = @"C:\",
            Title = "Browse Text Files",

            CheckFileExists = true,
            CheckPathExists = true,

            DefaultExt = "txt",
            FilterIndex = 2,
            RestoreDirectory = true,

            ReadOnlyChecked = true,
            ShowReadOnly = true,
            Filter = "Excel Worksheets|*.csv"
        };

        if (openFileDialog1.ShowDialog() == DialogResult.OK)
        {
            FileLocation  = openFileDialog1.FileName;                
            GetExcelSheetNames(openFileDialog1.FileName);

            MyConnection = new OleDbConnection(connString);

            MyCommand = new OleDbDataAdapter("select * from [" + SheetName + "]", MyConnection);
            MyCommand.TableMappings.Add("Table", "TestTable");
            Datatable_Temp = new DataTable();
            MyCommand.Fill(Datatable_Temp);
            MyConnection.Close();              
        }
        else
        {
            Canceled = true;
        }            
    }

    private string GetExcelSheetNames(string excelFile)
    {
        OleDbConnection objConn = null;
        DataTable dt = null;
        string CSVOrNot = excelFile.Substring(excelFile.Length - 3);    

        try
        {
            // Connection String.
            if (CSVOrNot == "csv")
            {
                connString = string.Format(@"Provider=Microsoft.Jet.OleDb.4.0; Data Source={0};Extended Properties=""Text;HDR=YES;FMT=Delimited""", Path.GetDirectoryName(excelFile));
            }
            else
            {
                connString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + excelFile + ";Extended Properties=Excel 12.0;";
            }
            // Create connection object by using the preceding connection string.
            objConn = new OleDbConnection(connString);
            // Open connection with the database.
            objConn.Open();
            // Get the data table containg the schema guid.
            dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

            if (dt == null)
            {
                MessageBox.Show("No Data Found");
                return null;
            }
            SheetName = dt.Rows[0]["TABLE_NAME"].ToString();

            return SheetName;
        }
        catch
        {
            return null;
        }
        finally
        {
            // Clean up.
            if (objConn != null)
            {
                objConn.Close();
                objConn.Dispose();
            }
            if (dt != null)
            {
                dt.Dispose();
            }
        }
    }

我发现了这个问题,它和我想的不一样。 看到文件的旧版本也在文件夹中,我没有注意到它没有采用旧版本本身,而是将所有CSV文件合并到输出中

我搜索了这篇文章,找到了以下帖子:

我添加了一个if子句以查看该文件是否为csv文件,然后使用以下命令: 因为打开Excel或CSV文件的区别在于Excel文件要求提供路径和文件名,而CSV只需要路径,然后在查询中选择文件…有点奇怪,但可以

MyCommand = new OleDbDataAdapter("SELECT * FROM [" + Path.GetFileName(openFileDialog1.FileName) + "]", MyConnection);

您对CSV文件的更改真的保存了吗?您确定要加载更改的文件吗?确保应用程序没有保存xlsx而不是csv。储蓄在哪里?您正在使用oledb,必须通过更新或插入将数据写回。@MarkusDeibel我使用记事本将其保存为CSV文件。如果我在记事本或Excel中打开该文件,该文件已经完成了它应该做的事情,但出于某种原因,我的Winforms会继续加载不再存在的文件。就像它在某种缓存中一样。代码showsn是所用代码的全部,当然不是。至少,它缺少程序中使用的各种变量的声明。它需要外部设置,比如CSV文件本身,当然还有Excel安装。如果没有Excel,您无法复制此内容,那么这实际上更多的是Excel用户的问题,而不是编程问题。@a.bakker:忽略发布完整代码的请求并不能让我们轻松帮助您。