Ошибка при открытии ExcelConnection C # VS2005 - PullRequest
0 голосов
/ 09 ноября 2011

Я пытаюсь импортировать файл .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, поэтому яЯ не могу продолжить процесс импорта данных в мою базу данных.

Ниже приведены скриншоты моей ошибки: enter image description here enter image description here

В заключение я вижу ошибку,путь к файлу, в котором сохранен файл csv, недопустим, хотя файл csv успешно сохранен.Нужна помощь опытных.Спасибо

Ответы [ 2 ]

1 голос
/ 09 ноября 2011

Строка подключения Источник данных должен содержать только путь к вашему 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);
1 голос
/ 09 ноября 2011

Я настоятельно НЕ рекомендую использовать OLE для доступа к документам Excel. Там бесконечное количество глюков и ошибок. Вообще, использование sql для доступа к данным, когда разные ячейки одного столбца могут содержать разные типы данных - это нонсенс Но даже без этого достаточно ошибок.

Использование COM-объектов для Excel. Иначе тебе будет тяжело - поверь мне на пол: -)

...