c#遍历表

场景:c# 遍历表的字段,该怎么处理

c# 遍历表的字段
我想获取数据库中一个表的几个字段,然后将这几个字段的值绑定在 dropdownlist里面,求解。
具体看下图
c#遍历表

比如我想获取该表中第一行数据 chick1, chick2, chick3,,,, chick12的值,并绑定到 dropdownlist里,
如果 chick1, chick2, chick3,,,, chick12中 没有值的 就不获取这个值,只保存有值的!!!

小鸟,真心等待求解。。。。。 有代码尽量带上。谢谢


------解决方案--------------------
最快的速度,莫过于先把行转列存至一个临时表。

同这样的表,一开始就设计就有问题,应该设计为一对多的关系。
某一天,还在添加或是移除几个thickN,不管是在程序还是数据库,均需要修改。
------解决方案--------------------
ListView控件利用while遍历数据库数据
  private void button1_Click(object sender, EventArgs e)
        {

            try
            {
                string P_Connection = string.Format(//创建数据库连接字符串
                    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb;User Id=Admin");
                OleDbConnection P_OLEDBConnection = //创建连接对象
                    new OleDbConnection(P_Connection);
                P_OLEDBConnection.Open();//连接到数据库
                OleDbCommand P_OLEDBCommand = new OleDbCommand(//创建命令对象
                    "select * from [book]",
                    P_OLEDBConnection);
                OleDbDataReader P_Reader = //得到数据读取器
                    P_OLEDBCommand.ExecuteReader();
                while (P_Reader.Read())//读取数据
                {
                    ListViewItem lv = new ListViewItem(P_Reader[0].ToString());
                    lv.SubItems.Add(P_Reader[1].ToString());
                    lv.SubItems.Add(P_Reader[2].ToString());
                    listView1.Items.Add(lv);
                }
                P_OLEDBConnection.Close();//关闭数据库连接
            }
            catch (Exception ex)
            {
                MessageBox.Show(//弹出消息对话框
                    "数据读取失败!\r\n" + ex.Message, "错误!");
            }
        }

------解决方案--------------------
sql查询出表字段,然后再绑定到 dropdownlist

select name from syscolumns where id=object_id('表名')




------解决方案--------------------

纠正下:dr[0]改成dr[i]c#遍历表

        public List<string> GetList()
        {
            string connStr = System.Configuration.ConfigurationManager.AppSettings["connStr"];
            string cmdText = "select thick1,thick2,thick3,thick4,thick5,thick6,thick7,thick8,thick9,thick10,thick11,thick12 from [表名] where 条件";

            List<string> columnList = new List<string>();
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;
                cmd.CommandText = cmdText;
                cmd.CommandType = CommandType.Text;

                using (SqlDataReader dr = cmd.ExecuteReader())
                {
                    while (dr.Read())//循环行,只有一行把while改成if
                    {
                        for (int i = 0; i <= 12; i++)//循环列
                        {

                            if (dr[i] != DBNull.Value)
                            {
                                string item = Convert.ToString(dr[i]);
                                if(!string.IsNullOrWhiteSpace(item)&&!columnList.Contains(item))//空检查,并检查是否已经存在于list中,不存在则添加
                                    columnList.Add(item);
                            }
                        }
                    }
                }
                cmd.Parameters.Clear();
            }
            return columnList;
        }

------解决方案--------------------
用行转换列非常之简单,我简单把你的sql语句写一下,你自己套用一下就可以了。

--> 测试数据:[TB]
if object_id('[TB]') is not null drop table [TB]
go 
create table tb(product_tye varchar(10),id int ,thick1 int ,thick2 int,thick3 int )
insert into tb 
select 'S','1995','1','2','3'
union all
select 'S','1996','4','5','6'
go

select id, v from tb 
unpivot
(
v for  c in (thick1,thick2,thick3)

)u  where id='1995'