2017-06-13 12 views
0

私は現在、Excelファイルを取り込んでデータをデータベースにインポートするWebアプリケーションを作成しています。私は、ファイルアップロードコントロールを挿入し、使用してファイルのパスを見つけることを試みてきました接続文字列にファイルパスを使用するにはどうすればよいですか?

string connStringExcel = @"Provider=Microsoft.ACE.OLEDB.12.0;Data 
Source=C:\users\myname\downloads\example.xlsx;Extended 
Properties=""Excel 
12.0;HDR=YES;"""; 

次のように私の現在の接続文字列は次のとおりです。

string filePath = 
System.IO.Path.GetFullPath(fileUpload.PostedFile.FileName); 

をし、その後に完全なファイルパスを交換し、私のfilePath変数だけの接続文字列。自分のファイルを選ぶために何ができるのですか?ハードコーディングする必要はありません。

Errors

答えて

2
string filePath = 
System.IO.Path.GetFullPath(fileUpload.PostedFile.FileName); 
string connStringExcel = $"Provider=Microsoft.ACE.OLEDB.12.0;Data 
Source={filePath};Extended 
Properties='Excel 
12.0;HDR=YES;'"; 
+0

のTrey、私はあなたの答えを試してみたが、現在はエラーを取得しています。私はそれがどのように見えるのかのイメージを付けました。何か案が? – nshull16

+0

このコードはString.Formatのショートカットを使用していますが、すべてのVSバージョンでは機能しません:( –

+0

内部引用符をエスケープするか、string.formatを使用する必要があります。 – Scrobi

0
<asp:FileUpload ID="fuManual" Enabled="false" runat="server" /> 
    <asp:Button ID="btnUploadDoc" Text="Upload" runat="server" OnClick="UploadDocument" /> 



    public void UploadDocument(object sender, EventArgs e) 
     { 
     try 
     { 

      if (fuManual.HasFile) 
      { 

       string manual_filename = ddlStore.SelectedItem.Text + "_" + "Manual.xlsx"; 

       string extension = Path.GetExtension(fuManual.PostedFile.FileName); 

       // Import Excel Code for Manual Excel Data import.... 
       string FilePath = Server.MapPath("~/Temp/" + manual_filename); 
       fuManual.SaveAs(FilePath); 
       System.Data.OleDb.OleDbConnection myConnection = new System.Data.OleDb.OleDbConnection(
          "Provider=Microsoft.ACE.OLEDB.12.0; " + 
          "data source='" + FilePath + "';" + 
           "Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\" "); 
       myConnection.Open(); 

       DataTable mySheets = myConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); 
       DataSet ds_manualData = new DataSet(); 
       DataTable dt_manualData; 

       for (int i = 0; i < mySheets.Rows.Count; i++) 
       { 
        dt_manualData = makeDataTableFromSheetName(FilePath, mySheets.Rows[i]["TABLE_NAME"].ToString()); 
        ds_manualData.Tables.Add(dt_manualData); 
       } 


       ViewState["ManualData"] = ds_manualData; 
       DataTable dts = new DataTable(); 
       dts = ds_manualData.Tables[0]; 
       //here u have the whole excel file in the data table now send it to the database 
       //remember to send table u need SqlDbType-structured 

       myConnection.Close(); 
      } 
      else 
      { 
       lblError.Text = "please Select the file to be uploaded"; 
      } 
     } 
     catch (Exception ex) 
     { 
     }          
    } 
    private static DataTable makeDataTableFromSheetName(string FilePath, string sheetName) 
    { 
     System.Data.OleDb.OleDbConnection myConnection = new System.Data.OleDb.OleDbConnection(
     "Provider=Microsoft.ACE.OLEDB.12.0; " + 
     "data source='" + FilePath + "';" + 
     "Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\" "); 

     DataTable dtImport = new DataTable(); 
     System.Data.OleDb.OleDbDataAdapter myImportCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [" + sheetName + "]", myConnection); 
     myImportCommand.Fill(dtImport); 
     return dtImport; 

    } 
+0

これは...... FilePath = Server.MapPath( "〜/ Temp /" + manual_filename);あなたは黒を作成する必要があるかもしれません。 "Temp"という名前のソリューション内のフォルダ –

関連する問題