公司需要做个自动生成sql语句并同步到数据库中的工具,其中有一个就是要判断数据库中的表或是表里的字段是否存在,那怎么在C#中怎么通过函数取数据库中的表名和表中字段的名称和属性呢,各位大虾帮帮忙啊,给个函数。谢谢了。

解决方案 »

  1.   

    要支持多个数据库的,像oracle、sqlserver等。
      

  2.   

    lz:在每个数据库中,都有一些系统表,它们专门用来建立用户建立的表的各种信息:如表名和表中字段的名称和属性。表名有:sysobjects,sysproperties,你打开这些表,信息就可以全看到了。
    你可以通像访问自己的表一样访问它们,从而去解决你的问题
      

  3.   

    主要还是从系统表或者系统视图入手ORACLE,SQL SERVER都有,就是连ACCESS也有隐藏的系统表
      

  4.   

    写个专门的存储过程获取。
    数据库里面会有相应的系统表如sysobjects
      

  5.   


    SELECT 
    (case when a.colorder=1 then d.name else '' end) 表名, 
    a.colorder 字段序号,
    a.name 字段名,
    (case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end) 标识, 
    (case when (SELECT count(*) 
    FROM 
    sysobjects 
    WHERE 
    (name in 
       (SELECT name 
       FROM sysindexes 
       WHERE (id = a.id) AND (indid in 
       (SELECT indid 
      FROM sysindexkeys 
      WHERE (id = a.id) AND (colid in 
      (SELECT colid 
      FROM syscolumns 
      WHERE (id = a.id) AND (name = a.name))))))) 
    AND (xtype = 'PK'))>0 then '√' else '' end) 主键, 
    b.name 类型, 
    a.length 占用字节数, 
    COLUMNPROPERTY(a.id,a.name,'PRECISION') as 长度, 
    isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as 小数位数, 
    (case when a.isnullable=1 then '√'else '' end) 允许空, 
    isnull(e.text,'') 默认值, 
    isnull(g.[value],'') AS 字段说明 
    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 
    order by a.id,a.colorder
      

  6.   

    SQL SERVER查询表是否存在
    select name AS '表名',id AS '表ID',xtype  from sysobjects where   xtype='U' AND name='你的表名'其中字段xtype的值的含义如下:
    C:检查约束。 
    D:默认的约束 
    F:外键约束 
    L:日志 
    P:存储过程 
    PK:主键约束 
    RF:复制过滤存储过程 
    S:系统表格 
    TR:触发器 (其类型有三种,字段为deltrig,instrig,updtrig,查看其值哪个大于0)
    U:表格。 
    UQ:独特的约束。 
    V:视图 
    X:被扩展的存储过程查询某表的字段:
    SELECT a.colid AS '字段顺序',a.[name] AS '字段名',b.[name] As '字段类型',a.length AS '字段长度'
    FROM syscolumns a, systypes b 
    WHERE a.xtype=b.xtype AND b.[name]<>'sysname' AND a.id=object_id('你的表名')
    ORDER BY a.colid
      

  7.   

    取出某数据库所有表的名称:select   name   from   sysobjects 
    取出某表的所有字段名:select   name   from   syscolumns   where   id=object_id( '你要查的表名 ') 
    取出某表的字段的属性名:select       type       from       syscolumns       where       id       =       object_id( '你要查的表名 ');     
    然后用老三类sqlconnection   ,sqlcommond,sqldatareader
      

  8.   

    可以通过访问系统表获得。sqlserver2000直接能看到,2005看不到但是存在。
    如上面的sql
    select   name   AS   '表名 ',id   AS   '表ID ',xtype     from   sysobjects   where       xtype= 'U '   AND   name= '你的表名 '