求:C#程序想得到SQL Server(2005)中一个表的结构信息,比如所有字段和类型等.
可以用Dataset和SQL都可以..

解决方案 »

  1.   

    datareader 也行吧
    columnname
      

  2.   

    在2005下:
      private void button1_Click(object sender, EventArgs e)
            {
                SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=sa;database=master");
                SqlCommand cmd = new SqlCommand("select * from dbo.spt_values", conn);            conn.Open();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                da.Fill(ds);
                this.dataGridView1.DataSource = ds.Tables[0];            MessageBox.Show(ds.Tables[0].Columns[1].DataType.ToString());
            }LZ自己发挥吧.只要是ds,那就是一张表,是张表就能把它一个一个得到
      

  3.   

    口误,ds不是一张表,ds是一个数据集,ds.Tables[num]就是这么多表中的哪一个.
    MessageBox.Show(ds.Tables[0].Columns[1].ToString());--得到字段名
    MessageBox.Show(ds.Tables[0].Columns[1].DataType.ToString());--得到类型
      

  4.   

    楼上的.谢谢了:)
    select * from dbo.spt_values这个语句不对吧?
      

  5.   

    SELECT 表名=case when a.colorder=1 then d.name else '' end,
           表说明=case when a.colorder=1 then isnull(f.value,'') else '' end,
           字段序号=a.colorder,
           字段名=a.name,
           标识=case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end,
           主键=case when exists(SELECT 1 FROM sysobjects where xtype='PK' and name in (SELECT name FROM sysindexes WHERE indid in(SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid))) then '√' else '' end,
           类型=b.name,
           占用字节数=a.length,
           长度=COLUMNPROPERTY(a.id,a.name,'PRECISION'),
           小数位数=isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),
           允许空=case when a.isnullable=1 then '√'else '' end,
           默认值=isnull(e.text,''),
           字段说明=isnull(g.[value],'')
       FROM syscolumns a 
           left join systypes b on a.xtype=b.xusertype 
           inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
           left join syscomments e on a.cdefault=e.id 
           left join sysproperties g on a.id=g.id  and a.colid=g.smallid 
           left join sysproperties f on d.id=f.id and f.smallid=0 
           where d.name='此处可添加要查询的表名'
       Order by a.id,a.colorder
      

  6.   

    表名只是举例的,你用自己的表名就可以。欢迎大家来我的博客作客:http://blog.csdn.net/aafshzj/
    我正在写一系列关于AAF组件框架的文章。该框架能对开发工作提供很多帮助,并极大地提高开发效率。希望大家看一看并提出宝贵建议。
      

  7.   

    直接使用系统对象select b.name as column_name, c.name as data_type
    from sysobjects a, syscolumns b, systypes c
    where a.xtype = 'U' and a.id = b.id and b.xtype = c.xtype
      and a.name = 'table_name'
    order by b.colid
      

  8.   

    使用Ado.net获取数据库架构信息
    http://blog.csdn.net/zhzuo/archive/2004/07/03/33273.aspx
      

  9.   

    select * from dbo.spt_values这个语句不对吧?------只是举个例子而已,2005里面没有pubs或Northwind数据库,所以我随便找了个,可能你不会认识。
    dbo.可以写也可以不写。dbo是数据库所有者database owner的意思。spt_values是一个表名,你可以换成你自己的表。