【发布时间】:2010-08-28 21:43:28
【问题描述】:
我是 .Net 编程的新手,想知道反射是否适合遍历对象以发现类实例中的集合。
我正在使用 Microsoft.SqlServer.Management.Smo 命名空间。
计划是连接到数据库,确定存在哪些集合,然后对于这些集合中的每一个,如果集合公开了实现 IScriptable 接口的对象,则为该对象生成一个脚本。
我如何执行以下操作(这是伪代码,因为我正在寻求使用反射或其他方法来执行以下操作的帮助)
Imports Microsoft.SqlServer.Management.Smo
Imports Microsoft.SqlServer.Management.Smo.Agent
Imports Microsoft.SqlServer.Management.Common
Dim db as Database
...
' 1. How do I determine all Collections in the db Object I have created, which implement the IScriptable Interface.
For each myCollection as Collection in db.Database.?Collections?
For each collection_object in myCollection
If collection_object.GetInterface("IScriptable") IsNot Nothing Then
ScriptObjectCreate(collection_object, destFolder & "\" & TypeOf(collection_object).toString() & "\", False)
End If
Next
Next
到目前为止,我可以通过执行以下操作连接到数据库并编写表格脚本。
For Each obj As Table In db.Tables
If Not (obj.IsSystemObject) Then
ScriptObjectCreate(obj, destFolder & "\" & "Tables\", False)
End If
Next
我想改变这一点的原因是,不同版本的 SQL Server 将包含不同的对象集合。而不是为每种类型编写代码。
For each obj as Table
For each obj as StoredProcedure
For each obj as Trigger
etc...
如果可能的话,我想用一个函数枚举数据库中的所有对象
【问题讨论】:
标签: c# sql-server vb.net reflection smo