2017-08-25 113 views
0

在嘗試將數據從excel導入數據庫時​​出現以下錯誤。將excel數據導入數據庫使用asp.net和c#

的Microsoft Office Access數據庫引擎找不到對象 '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

不,它沒有在進行中..我選擇文件,但上傳時我得到的錯誤。 –

回答

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

你的Excel文件格式使用這意味着Office 2003或更早版本的XLS,但您使用的是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 = string.Format("Select [InvoiceNumber],[AmountPaid],[Remarks] FROM [C:\\Users\\DAKTARI\\Desktop\\smarttable.xls]", "Orders$"); 

這應該改爲適當的形式如下:

Query = "SELECT [InvoiceNumber],[AmountPaid],[Remarks] FROM [Orders$]"; 
+0

非常感謝。我正在使用Excel 2016.我已經更正了ACE OLEDB使用jet 4.o,但現在我得到了這個錯誤;找不到可安裝的ISAM。 –

+0

好心幫助我..給我一段時間 –

+0

使用單引號「擴展屬性」部分而不是雙引號,請參閱已編輯的部分(從https://stackoverflow.com/questions/512143/error-could-未發現安裝的-ISAM)。 –

相關問題