将CSV加载到DataGridView中

3

以下是我用于在WinForms应用程序中将CSV文件加载到DataGridView中的代码:

private void loadCSV(string path)
{
  if (!File.Exists(path))
  {
    MessageBox.Show(this, "File does not exist:\r\n" + path, "No File", MessageBoxButtons.OK, MessageBoxIcon.Stop);
    return;
  }

  try
  {
    string conStr = @"Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=C:;Extensions=csv,txt";
    OdbcConnection conn = new OdbcConnection(conStr);
    OdbcDataAdapter da = new OdbcDataAdapter("Select * from " + path, conn);

    dt = new DataTable(path);
    da.Fill(dt);

    this.path = path;
    dataGridView.DataSource = dt;

    da.Dispose();
    conn.Close();
    conn.Dispose();
  }
  catch (Exception ex)
  {
    MessageBox.Show(this, "There was an error loading the CSV file:\r\n" + ex.Message, "IO Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    return;
  }
}

它可以处理几乎所有有效的CSV文件,但在包含某些字符的文件夹中的文件除外。

例如,它可以处理:

  • C:\Users\Public\Desktop\MyCSV.csv

但是无法处理:

  • C:\Users\Public\Desktop\My Folder\MyCSV.csv

有人知道怎么解决吗?我猜我需要以某种方式增强conStr。


1
“not work”是什么意思?针对哪些字符?您能发布一下错误信息吗? - user122211
42S02 "Microsoft Jet 数据库引擎无法找到该对象" - Ozzah
先生,您能帮忙吗?我能否从我的DataGridView创建一个CSV文件? - shariq_khan
1个回答

4

将您的选择语句更改为

OdbcDataAdapter da = new OdbcDataAdapter("Select * from [" + path + "]", conn);

文件名中的空格会导致文件无法使用。

我按照您的指示刚刚更改了代码行,但仍然出现错误:42S02“Microsoft Jet数据库引擎找不到对象”... - Ozzah
在您的连接字符串中,将 Dbq= 更改为您正在工作的文件夹,并在选择语句中执行 SELECT * FROM [some filename.csv] - Ryan
2
这个最终起作用了:string conStr = @"Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + Path.GetDirectoryName(Path.GetFullPath(path)) + ";Extensions=csv,txt";OdbcDataAdapter da = new OdbcDataAdapter("Select * from [" + Path.GetFileName(path) + "]", conn);. - Ozzah
先生,我正在研究 Winform 数据备份的问题。所以我想生成 CSV 文件。那么,我能否从 DataGridView 数据创建 CSV 文件呢? - shariq_khan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接