C#自动数据库代码生成的思路
C#操作数据库,写来写去就那么几句套话,烦。尽管有SqlHelper之类的辅助类,但还是有一堆参数要自己填,继续烦。最近有朋友问起自动代码生成工具的原理,那今天就说说我的思路吧。我只会MS SQL SERVER,所以就只拿它说事儿了。
其实大的思路很简单,获取数据库中的比较原子的对象,比如字段、参数等,并找出数据库各字段类型与C#中各种类型之间的对应关系即可。但具体到细节,诸如是不是需要引号,是不是需要提供长度,默认值的确定,参数的方向等等还是需要比较费些心思的。
举个简单例子吧,我们要从表中生成一个实体类,每个表字段也是实体对象的字段。很显然,只要知道表结构就可以精确的产生这个类定义。所以现在问题暂时就转换到了“知道表名,如何获取它包含的字段名和类型”。
最简单的方法,sp_columns '表名或视图名' 即可。不难发现,TYPE_NAME和COLUMN_NAME是我们想要的。
当然这样查出来的还都只是sql的类型,需要自己写个函数做下转换,转换成C#的类型。比如,将"varchar"转为"string"。
select * from sys.types order by name可以获取全部SQL的类型。
自动生成参数化的SELECT,INSERT,UPDATE等语句也可以用类似的方法获取字段名,然后参数就在字段名前加@符号,同样也可以依次拼装Parameters.AddWith("@字段名",....)语句。喜欢继续用SqlHelper的同学也可以生成参数列表。当然实际操作中还要考虑字段名的空格、保留字等因素。比如可以约定SQL字段的空格转换到C#变量的时候就用下划线代替,字段都用方括号引起来。
存储过程稍复杂点。首先当然根据存储过程名获取参数了。
select parameter_name,DATA_TYPE,PARAMETER_MODE,CHAR_LENGTH = isnull(CHARACTER_MAXIMUM_LENGTH,0)
from INFORMATION_SCHEMA.PARAMETERS
where specific_name='存储过程名' and Parameter_name <> ''
我们需要另外一套转换机制,从SQL类型转换到SqlDbType.XXX。比如,SQL类型是char(20),那么对应的C#有可能就是cmd.Parameters.Add("@参数名",SqlDbType.Char,20);。如果SQL类型是int型的,那就可以不需要考虑长度了。另外就是该参数的方向,并且体现在ParameterDirection上。
至于获取全部数据库常用对象,比如表、视图、存储过程、标量函数、表值函数等,可以用select * from sys.objects where type = 'U' and is_ms_shipped = 0 order by [name]语句。注意这里的 type,等于U是表,等于V就是视图,等于P是存储过程,等于FN是
相关文档:
枚举
枚举类型声明为一组相关的符号常数定义了一个类型名称。枚举用于“多项选择”场合,就是程序运行时从编译时已经设定的固定数目的“选择”中做出决定。
枚举类型(也称为枚举)为定义一组可以赋给变量的命名整数常量提供了一种有效的方法。例如,假设您必须定义一个变量,该变量 ......
asp.net默认的编码是UTF-8
js文件里的编码也是UTF-8
当你要在aspx页面上进行传中文参数时会出现乱码
<-----request.aspx--接收参数页----->
<----response.aspx--传送参数页----->
例一:<a href="request.aspx?str=中国人"></a>
解决办法一:
1.可以和改webconfig的编码 如:
  ......
手机音乐播发器里有总文件总时间的统计,在酷狗播放器里找了一下没找到。那我想知道这些歌曲的总时间,该怎么办?
其实很简单,稍稍动动手,就能找到答案!
请参考如下步骤:
第一步,保存播放列表,把里面的歌曲保存到一个你喜欢的名字。
第二步,在播放列表上面点右键,到处播放列表到你找的到的地方。
经测试,最新 ......