您好,欢迎访问三七文档
1、SqlServer中表结构的获取(根据动软代码生成器)要从创建表,首先要提取表的结构信息。以下代码组织了一个用于查询表结构的Sql语句。1.StringBuilderstrSql=newStringBuilder();2.strSql.Append(SELECT);3.strSql.Append(colorder=C.column_id,);4.strSql.Append(ColumnName=C.name,);5.strSql.Append(TypeName=T.name,);6.//strSql.Append(Length=C.max_length,);7.strSql.Append(Length=CASEWHENT.name='nchar'THENC.max_length/2WHEN8.T.name='nvarchar'THENC.max_length/2ELSEC.max_lengthEND,);9.strSql.Append(Preci=C.precision,);10.strSql.Append(Scale=C.scale,);11.strSql.Append(IsIdentity=CASEWHENC.is_identity=1THENN'√'ELSEN''END,);12.strSql.Append(isPK=ISNULL(IDX.PrimaryKey,N''),);13.14.strSql.Append(Computed=CASEWHENC.is_computed=1THENN'√'ELSEN''END,);15.strSql.Append(IndexName=ISNULL(IDX.IndexName,N''),);16.strSql.Append(IndexSort=ISNULL(IDX.Sort,N''),);17.strSql.Append(Create_Date=O.Create_Date,);18.strSql.Append(Modify_Date=O.Modify_date,);19.20.strSql.Append(cisNull=CASEWHENC.is_nullable=1THENN'√'ELSEN''END,);21.strSql.Append(defaultVal=ISNULL(D.definition,N''),);22.strSql.Append(deText=ISNULL(PFD.[value],N''));23.24.strSql.Append(FROMsys.columnsC);25.strSql.Append(INNERJOINsys.objectsO);26.strSql.Append(ONC.[object_id]=O.[object_id]);27.strSql.Append(AND(O.type='U'orO.type='V'));28.strSql.Append(ANDO.is_ms_shipped=0);29.strSql.Append(INNERJOINsys.typesT);30.strSql.Append(ONC.user_type_id=T.user_type_id);31.strSql.Append(LEFTJOINsys.default_constraintsD);32.strSql.Append(ONC.[object_id]=D.parent_object_id);33.strSql.Append(ANDC.column_id=D.parent_column_id);34.strSql.Append(ANDC.default_object_id=D.[object_id]);35.strSql.Append(LEFTJOINsys.extended_propertiesPFD);36.strSql.Append(ONPFD.class=1);37.strSql.Append(ANDC.[object_id]=PFD.major_id);38.strSql.Append(ANDC.column_id=PFD.minor_id);39.//strSql.Append(--ANDPFD.name='Caption'40.//--字段说明对应的描述名称(一个字段可以添加多个不同name的描述));41.strSql.Append(LEFTJOINsys.extended_propertiesPTB);42.strSql.Append(ONPTB.class=1);43.strSql.Append(ANDPTB.minor_id=0);44.strSql.Append(ANDC.[object_id]=PTB.major_id);45.//strSql.Append(--ANDPFD.name='Caption'46.//--表说明对应的描述名称(一个表可以添加多个不同name的描述));47.strSql.Append(LEFTJOIN);//--索引及主键信息48.strSql.Append(();49.strSql.Append(SELECT);50.strSql.Append(IDXC.[object_id],);51.strSql.Append(IDXC.column_id,);52.strSql.Append(Sort=CASEINDEXKEY_PROPERTY(IDXC.[object_id],53.IDXC.index_id,IDXC.index_column_id,'IsDescending'));54.strSql.Append(WHEN1THEN'DESC'WHEN0THEN'ASC'ELSE''END,);55.strSql.Append(PrimaryKey=CASEWHENIDX.is_primary_key=156.THENN'√'ELSEN''END,);57.strSql.Append(IndexName=IDX.Name);58.strSql.Append(FROMsys.indexesIDX);59.strSql.Append(INNERJOINsys.index_columnsIDXC);60.strSql.Append(ONIDX.[object_id]=IDXC.[object_id]);61.strSql.Append(ANDIDX.index_id=IDXC.index_id);62.strSql.Append(LEFTJOINsys.key_constraintsKC);63.strSql.Append(ONIDX.[object_id]=KC.[parent_object_id]);64.strSql.Append(ANDIDX.index_id=KC.unique_index_id);65.strSql.Append(INNERJOIN);66.//对于一个列包含多个索引的情况,只显示第1个索引信息67.strSql.Append(();68.strSql.Append(SELECT[object_id],Column_id,index_id=MIN(index_id));69.strSql.Append(FROMsys.index_columns);70.strSql.Append(GROUPBY[object_id],Column_id);71.strSql.Append()IDXCUQ);72.strSql.Append(ONIDXC.[object_id]=IDXCUQ.[object_id]);73.strSql.Append(ANDIDXC.Column_id=IDXCUQ.Column_id);74.strSql.Append(ANDIDXC.index_id=IDXCUQ.index_id);75.strSql.Append()IDX);76.strSql.Append(ONC.[object_id]=IDX.[object_id]);77.strSql.Append(ANDC.column_id=IDX.column_id);78.strSql.Append(WHEREO.name=N'+TableName+');79.strSql.Append(ORDERBYO.name,C.column_id);TableName为用户输入的表名称。查询结果是一个包含了表详细信息的DataTable(通过ADO.NET的SqlDataAdapter将数据Fill到DataSet中)。有了这些信息我们就可以生成创建表的语句了。(注:这些语句不适合SqlServer2000。具体这些语句是什么意思,问老李吧。。我也看不是很明白。)2、自定义一个SqlServer中数据类型到SQLCE数据类型的映射。SqlCE只支持18种数据类型,比SqlServer少的多。因此如果原数据库中有SqlCE不支持的数据类型,需要手动将数据类型映射为SqlCE数据类型。具体怎样映射,应可以根据需要手动设置。还有一些用户自定义的数据类型,在SqlCE中是不可以使用的。也需要映射。下面这个类完成数据的映射功能。首先编辑一个数据映射表(TypeMap.txt),保存一些如下面格式的数据:bigint=bigint;binary=binary;char=nchar;date=datetime;decimal=float;nvarchar=nvarchar;varchar=nvarchar;real=real;smalldatetime=datetime;smallint=smallint;smallmoney=money;text=ntext;tinyint=tinyint;uniqueidentifier=uniqueidentifier;varbinary=varbinary;NGUD=uniqueidentifier前面是SqlServer中的数据类型,后边是想要映射到SqlCE中的数据类型,中间一分号隔开。这个映射可以根据需要手动调整。下边类中的GetMapedDataType()函数返回映射后的数据类型。1.publicclassTypeMap2.{3.//获取数据库(SqlServer和SqlCE)字段类型映射4.privatestaticstringdatafile=5.System.Windows.Forms.Application.StartupPath+\\TypeMap.txt;6.7.//加载数据类型映射表8.privatestaticstring[]LoadTypeMap()9.{10.strings=string.Empty;11.if(File.Exists(datafile))12.{13.StreamReadersr=newStreamReader(datafile,Encoding.UTF8);14.//读取数据到字符串中15.s=sr.ReadToEnd();16.sr.Close();17.}18.//替换掉字符串中的回车换行符19.s=s.Replace(\r\n,);20.returns.Split(';');21.}22.23.///summary24.///获取数据库(SqlServer和SqlCE)字段类型映射25.////summary26.///paramname=sourceTypeSqlServer数据类型/param27.///returnsSqlCE数据类型/returns28.publicstaticstringGetMapedDataType(stringsourceType)29.{30.string[]ss=TypeMap.LoadTypeMap();31.//在映射表中查找原始类型映射后的数据类型32.foreach(stringsinss)33.{34.string[]sss=s.Split('=');35.if(s
本文标题:sql ce的使用
链接地址:https://www.777doc.com/doc-3362171 .html