我正在尝试将.csv文件导入我的数据库。我可以将excel工作表导入到我的数据库中,但是由于.csv的文件格式与.xls不同,我需要专门为.csv创建一个导入函数。
以下是我的代码:
protected void Button1_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
// Get the name of the Excel spreadsheet to upload.
string strFileName = Server.HtmlEncode(FileUpload1.FileName);
// Get the extension of the Excel spreadsheet.
string strExtension = Path.GetExtension(strFileName);
// Validate the file extension.
if (strExtension != ".xls" && strExtension != ".xlsx" && strExtension != ".csv" && strExtension != ".csv")
{
Response.Write("<script>alert('Failed to import DEM Conflicting Role Datasheet. Cause: Invalid Excel file.');</script>");
return;
}
// Generate the file name to save.
string strUploadFileName = @"C:\Documents and Settings\rhlim\My Documents\Visual Studio 2005\WebSites\SoD\UploadFiles\" + DateTime.Now.ToString("yyyyMMddHHmmss") + strExtension;
// Save the Excel spreadsheet on server.
FileUpload1.SaveAs(strUploadFileName);
// Create Connection to Excel Workbook
string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strUploadFileName + ";Extended Properties=Text;";
using (OleDbConnection ExcelConnection = new OleDbConnection(connStr)){
OleDbCommand ExcelCommand = new OleDbCommand("SELECT [columns] FROM +userrolelist", ExcelConnection);
OleDbDataAdapter ExcelAdapter = new OleDbDataAdapter(ExcelCommand);
ExcelConnection.Open();
using (DbDataReader dr = ExcelCommand.ExecuteReader())
{
// SQL Server Connection String
string sqlConnectionString = "Data Source=<IP>;Initial Catalog=<DB>;User ID=<userid>;Password=<password>";
// Bulk Copy to SQL Server
using (SqlBulkCopy bulkCopy =
new SqlBulkCopy(sqlConnectionString))
{
bulkCopy.DestinationTableName = "DEMUserRoles";
bulkCopy.WriteToServer(dr);
Response.Write("<script>alert('DEM User Data imported');</script>");
}
}
}
}
else Response.Write("<script>alert('Failed to import DEM User Roles Data. Cause: No file found.');</script>");
}
文件已成功保存,但错误表明该文件的路径无效,即使该文件已成功保存为.csv,因此我无法继续导入数据的过程进入我的数据库。
以下是我的错误的屏幕截图:
总之,我遇到错误,即保存csv文件的文件路径无效,尽管csv文件已成功保存。需要经验丰富的帮助。谢谢
答案 0 :(得分:1)
我强烈建议您不要使用OLE来访问Excel文档。有无数的故障和错误。 通常,当一列的不同单元格可以包含不同的数据类型时,使用sql访问数据 - 是无稽之谈。但即使没有这个,也有足够的错误。
将Excel对象用于Excel。否则,你会非常信任我: - )
答案 1 :(得分:1)
连接字符串数据源应仅包含CSV文件的路径。它不应包含CSV文件名。
文件名在SQL语句中指定为表。
string dir = @"C:\Documents and Settings\rhlim\My Documents\Visual Studio 2005\WebSites\SoD\UploadFiles\";
string mycsv = DateTime.Now.ToString("yyyyMMddHHmmss") + strExtension;
string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dir + ";Extended Properties=Text;";
OleDbCommand ExcelCommand = new OleDbCommand(
"SELECT [columns] FROM " + mycsv, ExcelConnection);