2011-11-09 21 views
0

.csvファイルをデータベースにインポートしようとしています。私はデータベースにExcelワークシートをインポートすることができますが、.xlsからの.csvとは異なるファイル形式のため、.csv用のインポート関数を特別に作成する必要があります。ExcelConnectionを開く際にエラーが発生しました。C#VS2005

以下

は私のコードです:

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>"); 

}

ファイルが正常に保存されていますが、エラーは、ファイルが正常に保存されているにもかかわらず、ファイルのパスが有効でないことを言いますas .csvとして、私はデータベースにデータをインポートするプロセスを続行できません。 csvファイルが正常に保存されているが、私はcsvファイルが保存されたファイルのパスが有効でないというエラーが生じています結論として enter image description here enter image description here

以下は私のエラーのスクリーンショットです。経験豊富な人から助けが必要です。ありがとうございます

答えて

1

接続文字列のデータソースには、のパスのみが含まれている必要があります。 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); 
+0

ありがとうございましたcampbell、それは私のために働いているようです。しかし、パイプで区切られたテキストファイルを.csvファイルに変換するときや、いくつかの列変数を2つの部分に分割して次の列にスキップして行をめちゃくちゃにするので、なぜそれが問題なのかをトラブルシューティングする必要があります。パイプで区切られたファイルを.csvファイルに変換するために使用したコードを見てみましょうか?ありがとうございます – gymcode

+0

http://stackoverflow.com/questions/8061307/rows-messed-up-when-converting-pipe-delimited-text-files-to-csv-excel-file-c-sh これはエラーです私は現在直面している、私はそれに変換にエラーがあった理由を手掛かりがありません。 – gymcode

1

Excelを使用してExcelドキュメントにアクセスすることは強くお勧めしません。無限の不具合やバグがあります。 一般に、ある列の異なるセルに異なるデータ型が含まれている場合は、SQLにデータにアクセスするのはナンセンスです。しかしこれがなくても十分なバグがあります。

Excel用のCOMオブジェクトを使用します。それ以外の場合は、床に頼りになります:

+0

+1私は思ったよりも速く「Interop」に戻りました。 –

+0

@MichałPowaga、ええ、私は似たような経験があります。 :-) –

関連する問題