【问题标题】:Inserting a csv file into an Access database that is in a different location C#将 csv 文件插入到位于不同位置的 Access 数据库中 C#
【发布时间】:2016-08-03 18:40:25
【问题描述】:

我正在尝试将 CSV 文件中的数据插入到本地 Access 数据库中的表中,但 CSV 文件与我的数据库位于不同的位置。插入语句正在尝试插入位于 Windows 临时文件夹中的 CSV 文件,但我不断收到错误消息,指出找不到对象(CSV 文件)。我们将不胜感激,谢谢!

以下是我收到的错误:

Microsoft Access 数据库引擎找不到对象“S_M_85010747_201605.csv”。确保对象存在并且正确拼写其名称和路径名。如果“S_M_85010747_201605.csv”不是本地对象,请检查您的网络连接或联系服务器管理员。

下面是我的代码:

//CSV file name
string csvFile = ddlReportType.Text.Substring(0, 1) + "_"
                + ddlDateType.Text.Substring(0, 1) + "_" + lblVendorID.Text + "_" + txtDate.Text + ".csv";

        //Path for temporary folder
        string marFolder = Path.GetTempPath() + @"\MobileAppReports";

        //CSV file in temporary folder path
        string marCSVfolderPath = marFolder + @"\" + ddlReportType.Text.Substring(0, 1) + "_"
                + ddlDateType.Text.Substring(0, 1) + "_" + lblVendorID.Text + "_" + txtDate.Text + ".csv";


        var fileNameToInsert = Path.GetFileName(marCSVfolderPath);

        if (File.Exists(marCSVfolderPath))
        {
            OleDbCommand cmdBulk = new OleDbCommand(@"INSERT INTO SalesSummary" +
                            @"SELECT * FROM [Text;FMT=Delimited;HDR=Yes;ACCDB=Yes;Database=C:\Desktop].[" + fileNameToInsert + "]", MyConn);

            MyConn.Open();
            cmdBulk.ExecuteNonQuery();
            MyConn.Close();

            Directory.Delete(marFolder, true);//Deletes the csv file in the temp folder
        }
        else
        {
            MessageBox.Show(csvFile + " does not exist in the temp folder.");
        }

【问题讨论】:

  • 如果您检查marCSVfolderPath,它是否显示正确的位置?看起来您正在使用文件夹名称。此外,您应该使用字符串格式而不是连接那么多字符串。
  • 这是正确的路径。字符串“marFolder”是临时文件夹的路径,它连接到字符串“marCSVfolderPath”,因为这是临时文件夹中 CSV 文件的名称和位置。
  • 您说“临时文件夹路径中的 CSV 文件”,但您的 SQL 正试图在 C:\Desktop 中打开它。这些是不同的路径吗?向我们展示marCSVfolderPath 包含的内容。
  • 是的,Access 数据库位于桌面上,我正在尝试插入位于临时文件夹中的 CSV 文件。 marCSVfolderPath 位于 C:\users\username\AppData\Local\Temp\MobileAppMetrics\S_M_85010747_201605.csv
  • 您的代码正在插入来自C:\Desktop 的CSV 文件,而不是来自C:\users\username\AppData\Local\Temp\MobileAppMetrics。在调试器中查看cmdBulk

标签: c# database csv ms-access oledb


【解决方案1】:

我可以看到你定义了 csv 文件路径和临时文件路径,但我没有看到你将 csv 复制到临时路径的位置,所以不知道它是如何通过 File.Exists 阶段的。

此外,您的查询字符串仅定义 fileNameToInsert 而不是整个路径。正如其他人所说,您似乎也将数据库路径定义为 csv 文件。

这是所有的代码吗?真的觉得你在这里错过了什么。

【讨论】:

  • 哇,你说得对。谢谢大家,在你们的帮助下,我能够弄清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 2020-10-12
相关资源
最近更新 更多