2012-01-18 68 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