`
java-mans
  • 浏览: 11898745 次
文章分类
社区版块
存档分类
最新评论

VS2010中创建自定义SQL Rule(郝宪玮)

 
阅读更多

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

  • 性能的稳定和提升,表现在WPF GUI和WPF文本呈现。
  • Windows Azure Tools模板。
  • 多显示器支持,输出窗口,类图窗口,代码定义窗口等提供辅助信息的窗口放置在副显示器中。
  • 对并行计算开发的大量支持。
  • 包含了SharePoint的项目模板和调试支持。
  • 用于Silverlight和WPF的拖放绑定支持。
  • C++ IDE的增强:通过简单的拖放操作,就能生成稳健的Windows窗体应用程序。
  • 通过并行安装以向后兼容.NET 3.5。
  • 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</dataruleproblem>

{

List<dataruleproblem> problems = new List<dataruleproblem>();</dataruleproblem></dataruleproblem>

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

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

分享到:
评论

相关推荐

    JEECG 数据权限自定义SQL表达式用法说明

    在角色授权环节,通过在系统中配置不同的自定义SQL,可以精细地控制不同角色对数据的访问范围和权限级别。 数据规则的实现,主要依靠自定义SQL语句来完成。这些SQL语句中涉及的字段名称必须与数据库表中的字段名...

    基于jquery js自定义sql条件查询

    用户自己定义动态组织sql查询条件,对于用户来说相当方便的啦。可以自由选择查询字段、条件条件、条件值,选择与或关系,包括括号优先的使用。根据查询字段不同,查询条件值的动态改变,如日期控件、下拉框、可输入...

    mybatisplus中自定义SQL

    本篇文章将深入探讨MyBatisPlus中如何进行自定义SQL,以便在特定场景下满足更复杂的查询需求。 首先,MyBatisPlus的核心思想是通过动态SQL来减少模板代码,但有时候,我们可能需要编写一些MyBatisPlus默认不支持...

    织梦自定义sql查询

    在织梦中,自定义SQL查询是一项非常实用的功能,允许用户通过编写SQL语句来获取数据库中的特定数据,进而灵活地在模板中展示。本文将深入探讨织梦自定义SQL查询的使用方法、标签查询的实现以及其在实际应用中的重要...

    天心ERP自定义SQL及套版

    天心ERP自定义SQL及套版使用说明 天心ERP自定义SQL及套版使用说明

    基于WinCC V6.2的VB脚本操作自定义SQL数据库.rar

    本资料集主要探讨如何利用VB脚本在WinCC V6.2中与自定义SQL数据库进行交互。 首先,了解VB脚本在WinCC中的应用是非常关键的。VB脚本是一种轻量级的编程语言,易于学习和实施,尤其适合于进行系统集成和自动化任务。...

    adf 自定义sql语句更新数据

    在Azure Data Factory (ADF) 中,自定义SQL语句用于更新数据是一种常见且强大的操作,尤其是在处理复杂的数据库交互时。本篇文章将深入探讨如何在ADF中利用自定义SQL语句来更新HR(人力资源)数据表空间中的信息。 ...

    Sqlserver 自定义函数 Function使用介绍

    SQL Server中的自定义函数是数据库开发中非常重要的组成部分,它们允许开发者创建自定义的逻辑,以便在查询中重用和简化复杂操作。本篇主要关注SQL Server 2008中的三种自定义函数:标量函数、内联表值函数和多语句...

    VS2010连接SQL Server 2008操作与编程

    连接成功后,你可以在VS2010中编写SQL查询、创建和修改表结构、执行存储过程等。这涉及到SQL语言的基本知识,包括SELECT语句用于查询,INSERT、UPDATE、DELETE语句用于数据操作,以及CREATE、ALTER、DROP等用于...

    Mybatis中执行String类型的自己拼写的sql,不执行配置文件中的sql

    本篇文章将详细探讨如何在MyBatis中执行String类型的自定义SQL,以及为何可能会选择不使用配置文件中的SQL。 首先,MyBatis的主要工作方式是通过Mapper接口和对应的XML配置文件来执行SQL。XML配置文件包含了SQL语句...

    mybatis执行自定义sql工具包

    在实际开发中,为了提高代码的复用性和灵活性,我们经常需要创建自定义的SQL工具包。`mybatis-helper`这个工具包就是为了帮助开发者更方便地在MyBatis中执行自定义SQL而设计的。 在MyBatis中,我们通常通过Mapper...

    SqlServer自定义多参数聚合函数实例代码

    以上就是关于"SqlSserver自定义多参数聚合函数实例代码"所涉及的知识点,包括SQL Server的自定义聚合函数、CLR集成以及如何在SQL Server中创建和使用这些函数的基本步骤。理解并掌握这些内容,将有助于我们在面对...

    自定义注解实现拦截sql.rar

    本示例中,“自定义注解实现拦截SQL”是关于如何通过注解来动态修改执行的SQL语句,以在其中增加特定的条件。这个功能在数据库操作中特别有用,比如在MyBatisPlus框架中,可以用来实现灵活的数据过滤或者权限控制。 ...

    数据库自定义SQL查询工具

    在自定义SQL查询工具中,用户可以自由地构造这些语句,以满足特定的查询条件,例如根据特定字段进行筛选、排序或分组,甚至进行复杂的联接操作。 使用这类工具前,确保系统已经安装了Java运行环境(JRE)或Java开发...

    自定义函数

    下面的示例展示了如何在SQL Server中创建一个自定义函数,该函数用于根据指定的ID拼接相应的值为一个字符串。 1. **创建表**:首先,我们需要创建一个简单的测试表`tb`,其中包含两列`id`和`value`。 ```sql ...

    sql server 自定义函数

    SQL Server中的自定义函数是数据库开发中的重要工具,允许用户根据特定需求创建自己的函数,以扩展标准SQL的功能。本文将深入探讨SQL Server自定义函数的种类、用途、创建方法以及实际应用示例。 一、自定义函数的...

    SQL自定义函数的好处

    SQL自定义函数是SQL Server 2000中新增的数据库对象,它允许用户根据需要自定义函数,以满足特定的业务需求。与系统内置的函数不同,自定义函数可以根据用户的需求进行定制,满足特定的业务需求。 SQL自定义函数的...

    MyBatis-Plus 分页查询以及自定义sql分页的实现

    然后在 SQL 映射文件中编写自定义 SQL: ```xml SELECT * FROM user != null"&gt; &lt;!-- 添加自定义条件 --&gt; ${wrapper.sqlSegment} LIMIT #{offset}, #{limit} ``` 通过这样的方式,你可以在保持自定义 ...

    在SQL2000中,自定义函数中使用getdate()

    在SQL Server 2000中,通过创建视图并将`GETDATE()`的值存储在其中,然后再通过自定义函数来间接访问这个值,可以有效解决在自定义函数中使用`GETDATE()`的问题。虽然这种方法存在一定的局限性和性能上的考虑,但...

Global site tag (gtag.js) - Google Analytics