【发布时间】: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