如何实现项目脚本的批量生成
需求:
一个大的信息管理系统是由各个单独的子系统组成的,有某些时候,只需要一部份的模块。这样在发布数据库的时候,就存在有比较大的问题。
只有两种方式:
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相关索引等.
调用就比较简单了,指定连接信息,数据库名称,对象名称,即可!