2017-08-25 4 views
0

を使用してデータをExcelにインポートすると、Excelからデータをデータベースにインポートしようとすると次のエラーが発生します。 Microsoft OfficeのAccessデータベースエンジンは、オブジェクト 見つけることができませんでしたasp.netとc#

:これは使用してい背後に私のコードです

'Cを\ユーザーがDAKTARI \デスクトップ\のsmarttable.xlsを\'。

public partial class Smarttable : System.Web.UI.Page 
{ 
    OleDbConnection Econ; 
    SqlConnection con; 

    string constr, Query, sqlconn; 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 


    private void ExcelConn(string FilePath) 
    { 

     constr = string.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\DAKTARI\Desktop\smarttable.xls;Extended Properties=""Excel 12.0 Xml;HDR=YES;"""); 
     Econ = new OleDbConnection(constr); 

    } 
    private void connection() 
    { 
     sqlconn = ConfigurationManager.ConnectionStrings["SqlCom"].ConnectionString; 
     con = new SqlConnection(sqlconn); 

    } 


    private void InsertExcelRecords(string FilePath) 
    { 
     ExcelConn(FilePath); 

     Query = string.Format("Select [InvoiceNumber],[AmountPaid],[Remarks] FROM [C:\\Users\\DAKTARI\\Desktop\\smarttable.xls]", "Orders$"); 
     OleDbCommand Ecom = new OleDbCommand(Query, Econ); 
     Econ.Open(); 

     DataSet ds = new DataSet(); 
     OleDbDataAdapter oda = new OleDbDataAdapter(Query, Econ); 
     Econ.Close(); 
     oda.Fill(ds); 
     DataTable Exceldt = ds.Tables[0]; 
     connection(); 
     //creating object of SqlBulkCopy  
     SqlBulkCopy objbulk = new SqlBulkCopy(con); 
     //assigning Destination table name  
     objbulk.DestinationTableName = "smarttable"; 
     //Mapping Table column  
     objbulk.ColumnMappings.Add("InvoiceNumber", "InvoiceNumber"); 
     objbulk.ColumnMappings.Add("AmountPaid", "AmountPaid"); 
     objbulk.ColumnMappings.Add("Remarks", "Remarks"); 
     //inserting Datatable Records to DataBase  
     con.Open(); 
     objbulk.WriteToServer(Exceldt); 
     con.Close(); 

    } 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
     string CurrentFilePath = Path.GetFullPath(FileUpload1.PostedFile.FileName); 
     InsertExcelRecords(CurrentFilePath); 
    } 
} 
+4

エラーは非常に具体的です..... – BugFinder

+0

これはタイミングエラーですか、つまり、ファイルを開くときにファイルのアップロードが進行中ですか? – camelCase

+0

いいえ、進行中ではありません.iファイルを選択しますが、アップロード時にエラーが発生します。 –

答えて

0

変更このライン

Query = string.Format("Select [InvoiceNumber],[AmountPaid],[Remarks] FROM [C:\\Users\\DAKTARI\\Desktop\\smarttable.xls]", "Orders$"); 

Query = "Select [InvoiceNumber],[AmountPaid],[Remarks] FROM [Orders$]"; 

FROMニーズは表のように扱われているシート名に続くべき

1

あなたのエクセルファイル形式の用途XLSはOffice 2003以前のバージョンを意味しますが、ACE OLEDBプロバイダを使用しています。 Office 2007のために使用されるか、またはそれ以降:

constr = string.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\DAKTARI\Desktop\smarttable.xls;Extended Properties=""Excel 12.0 Xml;HDR=YES;""); 

正しい使用方法は、このようなJet 4.0のプロバイダを使用している:

constr = string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=YES;'", FilePath); 

また、あなたは間違ったクエリ文字列は、ワークシート内のデータを読み取るために使用される第二の問題を持っています:

Query = "SELECT [InvoiceNumber],[AmountPaid],[Remarks] FROM [Orders$]"; 
0123:

Query = string.Format("Select [InvoiceNumber],[AmountPaid],[Remarks] FROM [C:\\Users\\DAKTARI\\Desktop\\smarttable.xls]", "Orders$"); 

これは、下の適切な形式に変更する必要があります

+0

ありがとう。エクセル2016を使用しています。私はジェット4.oを使用するようにACE OLEDBを修正しましたが、現在このエラーが発生しています。インストール可能なISAMが見つかりませんでした。 –

+0

親切に私を助けよう。時間の恩恵を受ける。 –

+0

二重のものではなく、「拡張プロパティ」の部分に一重引用符を使用する。編集したものを参照。(https://stackoverflow.com/questions/512143/error-could- not-find-installable-isam)を実行します。 –