2011-08-05 88 views
0

我準備自己從excel表數據導入到SQL服務器2005.I的動態範圍內選擇一些有要求的,而我從Excel導入表來database.I數據,但我無法找到答案,而且我也感到困惑,所以想到在這裏問我的查詢。Excel表格格式就是這樣。

第一行包含標題「交易」
第二行包含副標題爲「日期」
從第三行與列名,隨後在resp.rows數據的數據開始。
CustId CustName OUtlet TerminalNum日期DateTime金額
1 Nazima SS 770012234 1/22/2011 1/22/2011 12:34:45 1500.50
這是數據在Excel表單中的方式。細胞Excel工作表中的C#.NET

我試圖上傳的圖片,但它顯示的同時發佈我鍵入它的question.so問題。

我的要求是,當我從Excel表導入數據到數據庫我不得不忽略前兩行,並必須從第三行導入數據,我必須導入totalamount(62854)和總no.of行(11 )在一張桌子和數據在其他桌子。

我能夠使用的OleDbCommand數據使用下面的語句來導入:

oledbcommand cmd=new oledbcommand("select * from [sheet1$]",con);

oledbcomaand cmd=new oledbcommand("select * from [sheet1$A3:H13]",con); 

這兩個語句工作,但我不希望它以這種方式,因爲終端用戶可以輸入數據從任何單元格開始,所以我想動態地指定表單和範圍。在最終用戶開始輸入數據的任何單元格中,數據以及總量和no.of行應該被導入到數據庫中的reso.tables中,而不會有任何問題。

,也是我想知道我可以在表中插入新行,只要最終用戶在Excel工作表一個新行不插入它已經存在於表中的前一個行。

接下來我想知道哪些是從excel導入數據到數據庫的最佳方式。它通過excel互操作或通過Oledb.I嘗試使用導入/導出嚮導,SSIS,他們正在工作,但我必須做它以編程方式。

給我一些指導怎麼做我需要執行這些過程。

希望你明白我的疑問。

回答

0

使用Interop會有一個簡單的和更好的方式。但是,我從來沒有使用過它,因此不知道如何使用它。

My requirement is that when i import data from excel sheet to database i have to ignore the first two rows and have to import data from third row and i have to import totalamount(62854) and total no.of rows(11) in one table and data in other table.

  • 使用OleDbDataAdapter
  • 操縱上DataSet,即做所需的操作負載的數據DataSet
  • 現在從DataSet數據插入到所需Database

編輯:

示例代碼:

public static void ExcelOperations(string ConnectionString) 
    { 
     try 
     { 
      DataTable Sheets = new DataTable(); 

      using (OleDbConnection connection = new OleDbConnection(ConnectionString)) 
      { 
       connection.Open(); 

       //Retrieve the Sheets 
       Sheets = connection.GetSchema("Tables"); 

       //Display the Sheets 
       foreach (DataRow sheet in Sheets.Rows) 
       { 
        Console.WriteLine(sheet["TABLE_NAME"]); 
       } 

       //Take the First Sheet 
       string firstSheet = Sheets.Rows[0][2].ToString(); 

       //Retrieve contents 
       DataSet Contents = new DataSet(); 
       using (OleDbDataAdapter adapter = new OleDbDataAdapter("select FirstName,LastName,Email,Mobile from [" + firstSheet + "]", connection)) 
       { 
        adapter.Fill(Contents, "MyTable"); 
       } 

       //Display the contents 
       foreach (DataRow content in Contents.Tables["MyTable"].Rows) 
       { 
        Console.WriteLine(content[0] + " | " + content[1] + " | " + content[2] + " | " + content[3]); 
       } 
       Console.WriteLine(); 

       //Remove First Row; Note: This is not heading! 
       Contents.Tables["MyTable"].Rows.RemoveAt(0); 

       //Since the first row is removed, Second Row becames first row now. 
       //Clearing the LastName of our First Row. 
       Contents.Tables["MyTable"].Rows[0][1] = ""; 

       //Displaying the Contents 
       foreach (DataRow content in Contents.Tables["MyTable"].Rows) 
       { 
        Console.WriteLine(content[0] + " | " + content[1] + " | " + content[2] + " | " + content[3]); 
       } 
      } 

     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
    } 
+0

hi..i我堅持在一個疑難問題。要知道我如何刪除前兩行,其中只包含標題和副標題。我如何嘗試訪問第三行onwards.i我試着這段代碼,但我得到一個例外,也是不顯示數組中的列名稱。 – Nazima

+0

嗨..如果你不介意可以提供我一個示例代碼,我如何操縱數據集。我已經嘗試了一個代碼來刪除行包含標題和副標題和空行...但它沒有工作。它拋出異常。當前數據行不在數據集合中。 – Nazima

+0

您可以從我的博客[knvn.blog.com](http://knvn.blog.com/2011/08/02/export-data-to-excel-without-using-interop/)獲取'ConnectionString' – NaveenBhat