如何实现项目脚本的批量生成

需求:

  一个大的信息管理系统是由各个单独的子系统组成的,有某些时候,只需要一部份的模块。这样在发布数据库的时候,就存在有比较大的问题。

  只有两种方式:

      1。不管客户需不需要,把整个数据库给他。

      2。查找相应的表,存储过程,视图,函数。(如果没有记录,基本上是不可完成的工作,你愿意花大量的时间除外。)就算是你有记录,也得花不少时间。

 

解决思路:

  在维护一个数据对象表的同时,能根据对象自动产生脚本应该是一个不错的方法。

 

开始动手:

  首先需要引用Com对象,Microsoft SQLDMO Object Library,其实使用这个对象都可以开发出一个企业管理器出来。

  下面是SqlScriptHelper类的实现,比较简单

 

 


''' <summary>
''' 生成脚本的辅助类
''' </summary>
''' <remarks></remarks>
Public Class SqlScriptHelper



Dim s As New SQLDMO.SQLServer2

''' <summary>
''' 无参数类实例化
''' </summary>
''' <remarks></remarks>
Private Sub New()

End Sub


''' <summary>
''' 使用数据库连接信息实例化
''' </summary>
''' <param name="server"></param>
''' <param name="user"></param>
''' <param name="pwd"></param>
''' <remarks></remarks>
Public Sub New(ByVal server As String, ByVal user As String, ByVal pwd As String)
s.Connect(server.Trim, user.Trim, pwd.Trim)
End Sub
''' <summary>
''' 关闭数据链接
''' </summary>
''' <remarks></remarks>
Public Sub Close()
s.Close()
End Sub

''' <summary>
''' 获取数据库对象脚本
''' </summary>
''' <param name="dbName">数据库名称</param>
''' <param name="objectName">对象名称</param>
''' <returns></returns>
''' <remarks></remarks>
Function GetScript(ByVal dbName As String, ByVal objectName As String) As String
Return Me.GetScript(dbName, objectName, True)
End Function


''' <summary>
''' 获取数据库对象脚本
''' </summary>
''' <param name="dbName">数据库名称</param>
''' <param name="objectName">对象名称</param>
''' <param name="isDrop">是否生成移除对象的脚本</param>
''' <returns></returns>
''' <remarks></remarks>
Function GetScript(ByVal dbName As String, ByVal objectName As String, ByVal isDrop As Boolean) As String

Dim keeerp As SQLDMO.Database = CType(s.Databases.Item(dbName), SQLDMO.Database)

Dim t = keeerp.GetObjectByName(objectName)

If Not isDrop Then '对象存在则不更新脚本


Dim str = t.Script(SQLDMO.SQLDMO_SCRIPT_TYPE.SQLDMOScript_Default _
Or SQLDMO.SQLDMO_SCRIPT_TYPE.SQLDMOScript_Triggers _
Or SQLDMO.SQLDMO_SCRIPT_TYPE.SQLDMOScript_Indexes _
Or SQLDMO.SQLDMO_SCRIPT_TYPE.SQLDMOScript_DRI_All)

Return str



Else

Return t.Script(SQLDMO.SQLDMO_SCRIPT_TYPE.SQLDMOScript_Default _
Or SQLDMO.SQLDMO_SCRIPT_TYPE.SQLDMOScript_Triggers _
Or SQLDMO.SQLDMO_SCRIPT_TYPE.SQLDMOScript_Indexes _
Or SQLDMO.SQLDMO_SCRIPT_TYPE.SQLDMOScript_DRI_All _
Or SQLDMO.SQLDMO_SCRIPT_TYPE.SQLDMOScript_Drops)
End If

End Function




End Class

 

 

 

GetScript方法就可以根据指定的数据库和数据库中的对象返回相应的脚本,而脚本的选项是由SQLDMO_SCRIPT_TYPE枚举控制的SQLDMOScript_Drops是否生成删除语句,SQLDMOScript_Triggers是否生成触发器,SQLDMOScript_Indexes相关索引等.

 

调用就比较简单了,指定连接信息,数据库名称,对象名称,即可!

posted on 2009-12-08 17:12  zqonline  阅读(562)  评论(0编辑  收藏  举报

导航