//==============================================================================作 者:农民伯伯//邮 箱:over140@gmail.com//博 客:http://over140.cnblogs.com///时 间:2009-9-9//描 述:获取SQL SERVER 元数据==============================================================================usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Data;usingSystem.Data.SqlClient;usingSystem.Linq;publicsealedclassSqlSchemaProvider

{#regionConstructorpublicSqlSchemaProvider(stringconnectstring)

{

ConnectString=connectstring;

}#endregion#regionGetTableColumnspublicIListGetTableColumns(stringtableName)

{

IListresult=newList();

SqlConnectionStringBuilder scsb=newSqlConnectionStringBuilder(ConnectString);using(SqlConnection conn=newSqlConnection(scsb.ConnectionString))

{

conn.Open();

SqlCommand cmd=newSqlCommand(SQL2000_GetTableColumns, conn);

cmd.Parameters.Add(newSqlParameter("@DatabaseName", scsb.InitialCatalog));

cmd.Parameters.Add(newSqlParameter("@SchemaName","dbo"));

cmd.Parameters.Add(newSqlParameter("@TableName", tableName));

SqlDataReader reader=cmd.ExecuteReader(CommandBehavior.CloseConnection);while(reader.Read())

{

result.Add(newColumnInfo()

{

Name=reader.GetString(0),

DataType=reader.GetString(1),

Length=reader.GetInt32(3),

Nullable=reader.GetString(6).Trim().Equals("YES")?true:false,

DefaultValue=reader.IsDBNull(7)?"": reader[7].ToString(),

Identity=reader.GetInt32(8),

IdentitySeed=Convert.ToInt32(reader.GetString(12)),

IdentityIncrement=Convert.ToInt32(reader.GetString(13)),

ColumnDesc=reader.GetString(17)

});

}

reader.Close();

}returnresult;

}publicIListGetTables()

{

IListresult=newList();

SqlConnectionStringBuilder scsb=newSqlConnectionStringBuilder(ConnectString);using(SqlConnection conn=newSqlConnection(scsb.ConnectionString))

{

conn.Open();

SqlCommand cmd=newSqlCommand(SQL2000_GetTables, conn);

SqlDataReader reader=cmd.ExecuteReader(CommandBehavior.CloseConnection);while(reader.Read())

{

result.Add(reader.GetString(0));

}

reader.Close();

}returnresult;

}#regionType MapsprivatestringGetCSharpType(stringtype)

{if(string.IsNullOrEmpty(type))return"string";stringreval=string.Empty;switch(type.ToLower())

{case"varchar":case"nchar":case"ntext":case"text":case"char":case"nvarchar":

reval="string";break;case"int":

reval="int";break;case"smallint":

reval="Int16";break;case"bigint":

reval="Int64";break;case"float":

reval="double";break;case"bit":

reval="bool";break;case"decimal":case"smallmoney":case"money":case"numeric":

reval="decimal";break;case"binary":

reval="System.Byte[]";break;case"real":

reval="System.Single";break;case"datetime":case"smalldatetime":case"timestamp":

reval="System.DateTime";break;case"tinyint":

reval="System.Byte";break;case"uniqueidentifier":

reval="System.Guid";break;case"p_w_picpath":case"varbinary":

reval="System.Byte[]";break;case"Variant":

reval="Object";break;default:

reval="string";break;

}returnreval;

}#endregion#endregion#regionSQL Templates#regionGetTableColumnsprivateconststringSQL2000_GetTables=@"SELECT

object_name(so.id) AS OBJECT_NAME,

user_name(so.uid)  AS USER_NAME,

so.type            AS TYPE,

so.crdate          AS DATE_CREATED,

fg.file_group      AS FILE_GROUP,

so.id              AS OBJECT_ID

FROM

dbo.sysobjects so

LEFT JOIN (

SELECT

s.groupname AS file_group,

i.id        AS id

FROM dbo.sysfilegroups s

INNER JOIN dbo.sysindexes i

ON i.groupid = s.groupid

WHERE i.indid

) AS fg

ON so.id = fg.id

WHERE

so.type = N'U'

AND permissions(so.id) & 4096 <> 0

AND ObjectProperty(so.id, N'IsMSShipped') = 0

ORDER BY user_name(so.uid), object_name(so.id)";privateconststringSQL2000_GetTableColumns=@"SELECT

clmns.[name] AS [Name],

usrt.[name] AS [DataType],

ISNULL(baset.[name], N'') AS [SystemType],

CAST(CASE WHEN baset.[name] IN (N'char', N'varchar', N'binary', N'varbinary', N'nchar', N'nvarchar') THEN clmns.prec ELSE clmns.length END AS INT) AS [Length],

CAST(clmns.xprec AS TINYINT) AS [NumericPrecision],

CAST(clmns.xscale AS INT) AS [NumericScale],

CASE CAST(clmns.isnullable AS BIT) WHEN 1 THEN 'YES' ELSE 'NO' END AS [Nullable],

defaults.text AS [DefaultValue],

CAST(COLUMNPROPERTY(clmns.id, clmns.[name], N'IsIdentity') AS INT) AS [Identity],

CAST(COLUMNPROPERTY(clmns.id, clmns.[name], N'IsRowGuidCol') AS INT) AS IsRowGuid,

CAST(COLUMNPROPERTY(clmns.id, clmns.[name], N'IsComputed') AS INT) AS IsComputed,

CAST(COLUMNPROPERTY(clmns.id, clmns.[name], N'IsDeterministic') AS INT) AS IsDeterministic,

CAST(CASE COLUMNPROPERTY(clmns.id, clmns.[name], N'IsIdentity') WHEN 1 THEN IDENT_SEED(QUOTENAME(stbl.[name]) + '.' + QUOTENAME(tbl.[name])) ELSE 0 END AS NVARCHAR(40)) AS [IdentitySeed],

CAST(CASE COLUMNPROPERTY(clmns.id, clmns.[name], N'IsIdentity') WHEN 1 THEN IDENT_INCR(QUOTENAME(stbl.[name]) + '.' + QUOTENAME(tbl.[name])) ELSE 0 END AS NVARCHAR(40)) AS [IdentityIncrement],

cdef.[text] AS ComputedDefinition,

clmns.[collation] AS Collation,

CAST(clmns.colid AS int) AS ObjectId,

isnull(prop.value, '') AS ColumnDesc

FROM

dbo.sysobjects AS tbl

INNER JOIN dbo.sysusers AS stbl ON stbl.[uid] = tbl.[uid]

INNER JOIN dbo.syscolumns AS clmns ON clmns.id=tbl.id

LEFT JOIN dbo.systypes AS usrt ON usrt.xusertype = clmns.xusertype

LEFT JOIN dbo.sysusers AS sclmns ON sclmns.uid = usrt.uid

LEFT JOIN dbo.systypes AS baset ON baset.xusertype = clmns.xtype and baset.xusertype = baset.xtype

LEFT JOIN db.syscomments AS defaults ON defaults.id = clmns.cdefault

LEFT JOIN dbo.syscomments AS cdef ON cdef.id = clmns.id AND cdef.number = clmns.colid

LEFT OUTER JOIN sysproperties prop ON clmns.id = prop.id AND clmns.colid = prop.smallid

WHERE

(tbl.[type] = 'U' OR tbl.[type] = 'S')

AND stbl.[name] = 'dbo'

AND tbl.[name] = @TableName

ORDER BY

clmns.colorder";#endregion#endregion#regionPropertiespublicstringConnectString {get;set; }#endregion}

根据mysql生成数据库设计文档,第100篇博文纪念 | C# 根据数据库表结构生成DOC数据库文档(1)...相关推荐

  1. 第100篇博文纪念 | C# 根据数据库表结构生成DOC数据库文档

    一.目标 下图是我们要实现的目标: 二.实现 原理非常简单,首先制作样式模版,可以参照文章2,将排版好的Word另存为html,然后复制粘贴到aspx页面中,然后从数据库读取表以及字段信息,动态的插入 ...

  2. 根据数据库表结构生成Excel表设计——工具介绍

    根据数据库表结构生成Excel表设计 最近又接手了一些老系统,库表设计啥的都没有,十来个系统,每个系统都几十张表,一个个的补感觉太难了,合计了一下感觉还是搞个工具比较好. 在系统运维的过程中,很多时候 ...

  3. 根据数据库表结构生成Excel表设计——源码设计说明

    根据数据库表结构生成Excel表设计 在系统运维的过程中,很多时候大家都不喜欢改文档,修改了数据库字段后很少同步再更新表设计文档的,这就导致系统运行一段时间后,系统表设计与实际生产跑业务的设计出入很大 ...

  4. 数据库设计——将用户名和密码与用户其他信息分成两张表

    数据库设计--将用户名和密码与用户其他信息分成两张表 好处 (1)面向对象方面考虑用户信息就是用户本身,用户名和密码只是登陆钥匙. (2)性能方面考虑登陆验证的时候列较少,查询速度快. (3)安全性考 ...

  5. 【数据库设计】学生学籍信息和学期学年课程成绩信息表以及插入数据的python脚本生成设计

    [数据库设计]学生学籍信息和学年学期课程成绩信息设计 参考登陆用户信息设计 学籍信息设计 课程成绩信息设计 其他表的补充 专业-学院对照表 班级信息表 课程表 插入数据脚本 错误提示 参考登陆用户信息 ...

  6. proto文件导入mysql_导出mysql表结构生成grpc需要的proto文件工具

    使用过grpc的同学都知道,写proto文件比较繁琐,尤其是写message,对应很多字段,为此写了一个简单的从mysql直接读取表结构,生成proto文件的工具. 工具的使用很简单,需要简单的配置, ...

  7. python获取数据库查询的元数据_Python数据库、MySQL存储引擎、使用分区表、更改表结构、获取数据库元数据...

    :1. 数据库基本操作 1.1 创建数据库 - CREATE DATABASE test; #创建数据库 - GRANT ALL ON test.* to user(s); #为指定用户(或所有用户) ...

  8. mysql 查询两张表结构相同的数据库_利用反射处理多个表结构相同的数据的查询和数据库表的关联...

    最近做一个项目,需要对人口数据进行查询,但是人口数据分布在不同的街道表中,首先进行了数据表结构的统一,每个数据表以街道名开头,然后其他的名字都一样 前期将各个表中的字段也进行了统一 抽象出一张字典表 ...

  9. php mysql 查询数据库表结构_mysql查询数据库下的表结构?

    方法:1.使用DESCRIBE命令以表格的形式展示表结构,语法"DESCRIBE 表名;":2.使用"SHOW CREATE TABLE"命令以SQL语句的形式 ...

最新文章

  1. android layout后还原位置,Android图片框架photoview如何记住所有状态并还原,包括缩放度,缩放后的移动的距离等等...
  2. k-means-algorithm
  3. mysql数据库事务日志已满_服务器事务日志已满解决方法
  4. leetcode 79. Word Search | 79. 单词搜索(回溯+DFS)
  5. profile 安卓work_androidWorkProfileGeneralDeviceConfiguration 资源类型
  6. 加个ing是什么意思_英语中动词ed和ing形式作形容词时用法有啥区别,牢记以下要点!...
  7. 面试问题_教资面试,结构化面试问题分享
  8. python能做什么工作-会python语言能做什么工作
  9. 相机模型与标定(十四)--误差分析
  10. 主流数据持久层框架特性与实践
  11. 动态电路电容电感充放电分析
  12. linux 的 绘画软件,Drawing Linux(简单画图工具)
  13. FusionInsight HD 华为大数据平台
  14. 联想小新安装windows 7
  15. matlab获取2的整数次幂,如何快速判断正整数是2的N次幂
  16. 线性代数中满足乘法交换律的运算-行列式与迹
  17. android应用获取手机存储空间方法
  18. postman 9.16 打不开怎么办
  19. SpringSecurity:授权
  20. Qt技巧:获取QTextEdit文本内容

热门文章

  1. 线段树递归和非递归实现+hdu1166 敌兵布阵
  2. android 时间差 秒_Android进阶之使用时间戳计算时间差
  3. SSD201 / SSD202D 在86盒智能网关的应用分享
  4. 净误差与遗漏为负值的含义_巴丹吉林沙漠湖泊水位变化及地下水净补给量
  5. vi的插入模式下退格和方向键不能使用的解决方法
  6. 记-安装pillow
  7. LPC2103开发板I2C测试试验
  8. 2018多校1 hdu6298 6300 6308
  9. 说说docker run的--detach
  10. ★☆★ lc 847. Shortest Path Visiting All Nodes