获取数据库架构并生成脚本 - 以编程方式vb.net

时间:2013-09-17 15:19:14

标签: sql xml vb.net database-schema

我正在尝试编写一个连接到服务器并获取数据库的整个架构/元数据的vb.net程序,然后将其生成一个脚本,该脚本可用于更新不同开发中的数据库架构环境。所有这一切都必须通过Visual studio(.net)完成。

我一直在寻找解决方案的高低,但我没有遇到任何解决我问题的方法。

我最接近的是在vb文件中使用以下代码,并通过命令提示符使用VBC生成一个创建xml文件的.exe文件。 .vb文件取决于下面的SQL查询。此SQL查询仅检索每列的表,列和数据类型,我试图获取整个数据库实例的模式

SELECT t.name AS TableName, SCHEMA_NAME(t.schema_id) AS SchemaName, c.name AS ColumnName, tp.name as DataType 
FROM sys.tables AS t 
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID 
INNER JOIN sys.types tp ON c.system_type_id =  tp.system_type_id ORDER BY TableName

我不知道还能做什么或在哪里寻找新事物。我读过的所有内容要么只是使用GetSchema vb类检索表模式,要么是通过SQL Server管理工作室生成数据库模式脚本。

任何帮助和建设性的意见将不胜感激

1 个答案:

答案 0 :(得分:0)

我使用以下资源编写代码

**连接到服务器和数据库并获取架构并在控制台中写入

http://technet.microsoft.com/en-us/library/ms205738.aspx

**写入文本文件

http://msdn.microsoft.com/en-us/library/6ka1wd3w.aspx

我最终将文件保存为.sql

获取架构的实际代码如下所示,可以在第一个链接

下找到
For Each tb In db.Tables
    smoObjects = New Urn(0) {}
    smoObjects(0) = tb.Urn
    If tb.IsSystemObject = False Then
        Dim sc As StringCollection
        sc = scrp.Script(smoObjects)
        Dim st As String
        For Each st In sc
            Console.WriteLine(st)
        Next
    End If
Next

使用以下导入

Imports Microsoft.SqlServer.Management.Smo
Imports Microsoft.SqlServer.Management.Common
Imports Microsoft.SqlServer.Management.Sdk.Sfc
Imports System.Data.SqlClient
Imports System.Collections.Specialized
Imports System.Text
Imports System.IO