所用的Sql语句如下(就是在CSDN论坛找到的经典算法):SELECT 表名 = d.name , 字段名= a.name, 主键 = case when exists(SELECT 1 FROM sysobjects where xtype='PK' and parent_obj=a.id 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.xtype,长度 = COLUMNPROPERTY(a.id,a.name,'PRECISION'),小数位数   = isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),允许空 = case when a.isnullable=1 then '√'else '' end FROM AccountPayableDB..syscolumns a left join AccountPayableDB..systypes b on a.xusertype=b.xusertype  inner join AccountPayableDB..sysobjects d on a.id=d.id  and d.xtype='U' and  d.name<>'dtproperties'  left join AccountPayableDB..syscomments e on a.cdefault=e.id left join AccountPayableDB..sysproperties g on a.id=g.id and a.colid=g.smallid  left join AccountPayableDB..sysproperties f on d.id=f.id and f.smallid = 0  order by a.id,a.colorder 我在查询分析器中试过,结果没问题的,但是用SqlDataAdapter.Fill填充到DataTable后,
长度结果为System.DBNull, 小数位数都是0。为什么用sqlDataAdapter执行后得到的结果会有System.DBNull呢?

解决方案 »

  1.   

    哪个的长度?
    哪个值为DBNull
      

  2.   

    终于有人关注了,就是长度与小数位数那两个字段呀。
    To: Firestone2003(笨笨小猪)
    长度 = COLUMNPROPERTY(a.id,a.name,'PRECISION')
    小数位数   = isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0)
    就是这两句呀。To: malongning(马龙) 
    分开要怎样写?我需要一次把一个数据库里面的所有用户表的表结构信息都取出来,还有更好的办法吗?
    To: cic_wxf(应胡主席要求,我决定改名) 
    这个我也不太注意。因为是我自己练手的小程序中用到它。效率方面没考虑那么多。