2012-01-18 53 views
0

嗨,我有一個Excel表與標題,我想這些頭填充到一個下拉列表...如何將excelsheetcloumn名稱填充到下拉列表中?

任何一個可以幫助我的select語句和程序

我是一個代碼,我的工作天璣知道是否它的正確與否

 DropDownList list = new DropDownList(); 
        string connectionstring = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;""", Excelpath); 
        string query1 = String.Format("select * from [{0}]", DDlist.SelectedItem.Text);            
        // OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query1, connectionstring);             
        using (OleDbConnection conn1 = new OleDbConnection(connectionstring)) 
        { 
         OleDbCommand odc1 = new OleDbCommand(string.Format(query1, conn1)); 
         conn1.Open(); 
         OleDbDataReader dr; 
         dr = odc1.ExecuteReader(); 
         while (dr.Read()) 
         { 
          list.Items.Add(dr[column.ColumnName].ToString()); 
         } 
         dr.Close(); 
         conn1.Close(); 
        } 
在這種方法

我在這行

dr = odc1.ExecuteReader();Error:ExecuteReader: Connection property has not been initialized. 

CA歌廳錯誤n任何一個幫助mw與此,預先感謝

+0

試「的OleDbCommand odc1 =新的OleDbCommand(QUERY1,conn1就);」 – Nalaka526 2012-01-18 06:23:09

+0

投擲errot在「list.Items.Add(dr [column.ColumnName] .ToString());」「System.IndexOutOfOrangeRangeException:CUSTOMER_ID」... @ Nalaka526 – 2012-01-18 06:27:49

回答

0

試試這個它可能工作.....

    foreach (DataTable table in DS.Tables) 
      { 
       foreach (DataColumn column in table.Columns) 
       { 
        DropDownList list = new DropDownList(); 
        string connectionstring = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;""", Excelpath); 
        string query1 = String.Format("select * from [{0}]", DDlist.SelectedItem.Text);                  
        using (OleDbConnection conn1 = new OleDbConnection(connectionstring)) 
        { 
         OleDbCommand odc1 = new OleDbCommand(query1, conn1); 
         conn1.Open(); 
         DataTable dte = null; 
         DataSet ds = new DataSet(); 
         dte = conn1.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
         OleDbDataAdapter objAdapter1 = new OleDbDataAdapter(); 
         objAdapter1.SelectCommand = odc1; 
         objAdapter1.Fill(ds, "xldata"); 
         for (int i = 0; i < ds.Tables[0].Columns.Count; i++) 
         { 
          list.Items.Add(ds.Tables[0].Columns[i].ColumnName.ToString()); 
         } 
         conn1.Close(); 
        } 
+0

我認爲這一個更適合我的答案更好的答案..謝謝你@ Anil – 2012-02-13 16:06:15

0

我認爲你沒有將連接傳遞給OleDBCommand。因此,嘗試,

OleDbCommand odc1 = new OleDbCommand(query1, conn1); 
+0

我確實通過這個命令它不工作看到我的代碼 – 2012-01-18 06:29:27

0

OleDbCommand類有兩個主要參數的正確執行傳遞。這是查詢和連接對象。在你的代碼中,你傳遞的是連接,但它被放置在String.Format()之內,所以放置在外面。請參閱下面的代碼....

OleDbCommand odc1 = new OleDbCommand(string.Format(query1, conn1)); 

TO

OleDbCommand odc1 = new OleDbCommand(query1, conn1); 
+0

拋出errot在「list.Items.Add(dr [column.ColumnName] .ToString());」「System.IndexOutOfOrangeRangeException:CUSTOMER_ID」... – 2012-01-18 06:33:19

+0

是我的方法正確.....並選擇聲明到 – 2012-01-18 06:33:48

+0

你的select語句有點大錯,只從表中選擇列名。轉到這個鏈接來選擇只有列http://stackoverflow.com/questions/452464/how-can-i-get-column-names-from-a-table – 2012-01-18 06:39:55