开发者社区> 灵动生活> 正文

VS2010中创建自定义SQL Rule

简介: VS2010已经发布几天时间了,一些新的特性特别引人注目,比如: l         性能的稳定和提升,表现在WPF GUI和WPF文本呈现。 l         Windows Azure Tools模板。
+关注继续查看

VS2010已经发布几天时间了,一些新的特性特别引人注目,比如:

l         性能的稳定和提升,表现在WPF GUIWPF文本呈现。

l         Windows Azure Tools模板。

l         多显示器支持,输出窗口,类图窗口,代码定义窗口等提供辅助信息的窗口放置在副显示器中。

l         对并行计算开发的大量支持。

l         包含了SharePoint的项目模板和调试支持。

l         用于SilverlightWPF的拖放绑定支持。

l         C++ IDE的增强:通过简单的拖放操作,就能生成稳健的Windows窗体应用程序。

l         通过并行安装以向后兼容.NET 3.5

l         F#语言的支持,JavaScript智能感知引擎等等。

除去以上特性,创建自定义SQL Rule也有所变化。本文就如何在VS2010中创建SQL Rule进行说明 。

1.      什么是Visual Studio Database Edition以及特性。

Visual Studio Database Edition(以下简称VSDB)是针对典型的数据库开发任务而设计的,可以对原有数据库反向工程,添加表,存储过程和其他数据库项目,而且有选择性地将修改部署到目标数据库中。他的主要特性有:

1.1模型对比(Schema Compare

在项目的维护和升级期间,至少需要维护产品数据库(正在正式运营的数据库)、测试数据库、开发数据库这三个数据库,那开发数据库结构变更后,如何同步到其他两个数据库上呢?模型对比功能可以很好地解决此问题。如果开发数据库结构变更,可以通过选择菜单的Data Schema Compare Filter中选择Different Objects, Missing Objects or New Objects来过滤列表。这个过滤可以使我们快速地看到哪些修改需要更新到目标数据库中。然后我们可以保存修改脚本到一个文件中,并在T-SQL编辑器或者直接将修改精写入到目标数据库。

 

1.2数据对比(Data Compare

    用来比较两个数据库的表或者视图中数据是否相同,可进行比较的前提是数据库名称一致、表具有相同的主键、唯一索引或唯一约束。比较完后可以对修改保存到目标数据库或者脚本。这个特性可以将产品数据库的数据导入到开发数据库或者测试数据库,以便于开发和测试。

 

1.3数据生成计划(Data Generation Plans

在项目中,开发团队每周至少一次提交版本到测试环境,测试人员针对新的数据结构如何快速生成测试基础数据呢? 数据生成计划会解决此问题。在数据生成计划计划中,我们要定义生成数据的表、每一个表要生成的记录行数和要插入数据的类型。数字类型比较容易生成,针对特殊的数据比如Email、电话号码可以通过正则表达式RegEx完成。

 

1.4重构(Refactor

    主要用来重命名数据库对象,比如数据库名称,表名称,视图名称。当要重命名的对象改变后,对此对象的引用都会相应地改变。

2.      如何自定义SQL Rule

随着时代的进步及其全球化,企业业务越来越复杂,造成软件项目也越来越庞大,软件开发再也不是单枪匹马的时代,靠一两个人是完成不了任务的,软件工厂模式是一个趋势,软件工厂生产线是一个方向,软件的生成就可以像普通的产品一样,流转过整个生产线后,已经定型并被客户部署上线。庞大的生产线,庞大的队伍,各式各样的编程习惯,如何保证生产线的效率和软件产品质量,无规矩不成方圆,代码编写规范是其中很重要的一个规矩,数据库命名规范也是代码编写规范里面比较重要的组成部分,VSDB可以很好地解决这个问题,强制要求开发人员按照数据库规范来对数据库对象命名。接下来让我们看看如何解决这个问题。

2.1生成强命名类

调用命令行程序(路径=系统盘:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\) sn.exe -k FRIMLEC.text.snk

然后把创建好的FRIMLEC.text.snk加入的工程中。设置参见下图(选中工程右键--Properties--Signning)

 

提示使用强名称对程序集进行签名将向包含程序集清单的文件添加公钥加密。强名称签名帮助验证名称的唯一性,避免名称欺骗,并在解析引用时向调用方提供唯一标识。但是,任何信任级别都不会与一个强名称关联。

 

2.2引入类库

using Microsoft.Data.Schema.Extensibility;

using Microsoft.Data.Schema.SchemaModel;

using Microsoft.Data.Schema.SchemaModel.Abstract;

using Microsoft.Data.Schema.ScriptDom.Sql;

using Microsoft.Data.Schema.Sql.SchemaModel.SqlServer;

using Microsoft.Data.Schema.Sql.SqlDsp;

using Microsoft.Data.Schema.StaticCodeAnalysis;

 

 

2.3定义类

定义了一些类的属性(attributes)。

DatabaseSchemaProviderCompatibility允许用户指定Sql Rule所要应用的SqlDatabase类型,这里使用的是标准SqlDatabase

DataRuleAttirbute用来指定name, id, description等其他规则属性。

SupportedElementTypeAttribute,此属性用来指定要验证的数据库对象,此处要验证的是表字段。

 

2.4构造函数

public MyStylePrefixedTable()

            : base(

         "SqlRule",

         "DD0002",

         "All columns must be in form xxxx_xxxxxxxx",

         "All columns must be in form xxxx_xxxxxxxx where the part befor the _ is table code, and part after is descriptivename",

         "",

         "MyStylePrefixedTable")

        {

        }

定义一些列的命名规则,即4个字母的表名_字段名。

 

2.5新建资源文件

所有传到DataRuleAttribute里面的字符串都需要添加到以上资源文件中。填写资源文件如下图:

 

2.6创建常量类

此处的ResourceBaseName就是资源文件的表名。

2.7重写Analyze方法

public override IList<DataRuleProblem> Analyze(DataRuleSetting ruleSetting, DataRuleExecutionContext context

{

    List<DataRuleProblem> problems = new List<DataRuleProblem>();

 

    IList<string> nameParts = context.ModelElement.Name.Parts;

    IDatabaseColumn column = context.ModelElement as IDatabaseColumn;

    if (column == null)

        return null;

 

    if (nameParts.Count == 3)

    {

        if (!Regex.Match(nameParts[2], @"^w{4}_w*").Success)

        {

            string message = string.Format(

                "Column {0} of table {1}.{2} must have the form pref_columnname.",

                 nameParts[2], nameParts[0], nameParts[1]);

            DataRuleProblem p = new DataRuleProblem(this, message, context.ModelElement);

 

            p.Severity = DataRuleProblemSeverity.Error;

            problems.Add(p);

        }

    }

 

    return problems;

}

 

2.8注册Sql Rule

copy "$(TargetDir)$(TargetName)$(TargetExt)" "$(ProgramFiles)Microsoft Visual Studio 10.0VSTSDBExtensions$(TargetName)$(TargetExt)" /y

 

copy "$(ProjectDir)$(TargetName).Extensions.xml" "$(ProgramFiles)Microsoft Visual Studio 10.0VSTSDBExtensions$(TargetName).Extensions.xml" /y

 

"C:Program FilesMicrosoft SDKsWindowsv7.0ABinNETFX 4.0 Toolsgacutil.exe" /if "$(ProgramFiles)Microsoft Visual Studio 10.0VSTSDBExtensions$(TargetName)$(TargetExt)"

拷贝到Build Events->Pre-build event中,然后编译类库,生成相应的DLL文件,供其项目调用。

 

    至此,在VS2010中定制数据库命名规则的功能完成,再也不用担心开发人员不按照规则开发了,如果出现不按照规则的命名,脚本编译不能通过,并且有提示。

3.      总结

相信VS2010的这些新的特性,以及一些新的开发技巧能够快速提高开发人员的工作效率。对VS2010新版本感兴趣的朋友,可以通过该地址下载:http://www.microsoft.com/visualstudio/zh-cn/products/2010/default.mspx

 

版权

作者:灵动生活 郝宪玮

出处:http://www.cnblogs.com/ywqu

如果你认为此文章有用,请点击底端的【推荐】让其他人也了解此文章,

img_2c313bac282354945ea179a807d7e70d.jpg

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
(三)mybatisPlus自定义Sql语句
mybatisPlus自定义Sql语句 🍅 Java学习路线:搬砖工的Java学习路线 🍅 作者:程序员小王 🍅 程序员小王的博客:https://www.wolai.com/wnaghengjie/ahNwvAUPG2Hb1Sy7Z8waaF 🍅 扫描主页左侧二维码,加我微信 一起学习、一起进步 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕
42 0
java执行自定义sql时报错 error in your SQL syntax;
java执行自定义sql时报错 error in your SQL syntax;
67 0
知识分享之Golang——使用gorm时进行执行自定义SQL的几种方式
知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。 知识分享系列目前包含Java、Golang、Linux、Docker等等。
169 0
【Flink-API】Table API & SQL 以及自定义UDF函数
【Flink-API】Table API & SQL 以及自定义UDF函数
76 0
开发指南—常见问题—如何自定义SQL超时时间
在PolarDB-X中,PolarDB-X节点与RDS的默认SQL执行超时时间是900秒(可以调整),但是对于某些特定的慢SQL,其执行时间可能超过了900秒 。针对这种慢SQL,PolarDB-X提供了调整超时时间的自定义HINT。通过这个自定义HINT可以任意调整SQL执行时长。
46 0
Flink SQL 自定义 redis connector
一般情况下,我们不需要创建新的 connector,因为 Flink SQL 已经内置了丰富的 connector 供我们使用,但是在实际生产环境中我们的存储是多种多样的,所以原生的 connector 并不能满足所有用户的需求,这个时候就需要我们自定义 connector,这篇文章的重点就是介绍一下如何实现自定义 Flink SQL connector ? 先来看一下官网的一张 connector 架构图:
579 0
MyBatis-Plus - 一篇带你解决自定义 SQL 注入器失效必杀技
MyBatis-Plus - 一篇带你解决自定义 SQL 注入器失效必杀技
507 0
【spark系列4】spark 3.0.1集成delta 0.7.0原理解析--delta自定义sql
【spark系列4】spark 3.0.1集成delta 0.7.0原理解析--delta自定义sql
152 0
如何快速实现自定义sql分页?若不会,我便手把手教你【巨详细】
如何快速实现自定义sql分页?若不会,我便手把手教你【巨详细】
347 0
Springboot系列(九):mybatis-plus之自定义sql零基础教学 | 超级干货,建议收藏!
Springboot系列(九):mybatis-plus之自定义sql零基础教学 | 超级干货,建议收藏!
508 0
+关注
灵动生活
12年电商经验,8年IT项目管理经验,曾就职于中国第一家上市的B2C电商公司麦考林,擅长电商业务模式规划以及大型电商系统架构。创立闪酷&amp;酷客多小程序
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
用SQL做数据分析
立即下载
阿里云流计算 Flink SQL 核心功能解密
立即下载
Comparison of Spark SQL with Hive
立即下载