`

(喷血分享)利用.NET生成数据库表的创建脚本,类似SqlServer编写表的CREATE语句

阅读更多

(喷血分享)利用.NET生成数据库表的创建脚本,类似SqlServer编写表的CREATE语句

 

  在我们RDIFramework.NET代码生成器中,有这样一个应用,就是通过数据库表自动生成表的CREATE语句,如下图所示:

  在实现此功能前摸索了很多方法,最后借助MSSQLSERVER自带的dll文件来完成。先截图展示下此功能生成后的效果,然后再分享代码与方法,欢迎大家讨论其他可行方式,谢谢。

  通过上图可以看到,生成的表CREATE语句与SQLSERVER企业管理器生成的语句完全一样。现在我们来看一看如何实现。在上面我说过,我采用的是SQLSERVER自带的dll文件的方法来完成。因此,我们首先要引用MSSQLSERVER的相关dll文件,如我的SQLSERVER安装在“D:\Program Files\Microsoft SQL Server\”,打开目录“D:\Program Files\Microsoft SQL Server\100\SDK\Assemblies”,就可以看到SQLSERVER的全部dll文件了,其实通过这些dll文件,我们可以完成像SQLSERVER企业管理器一样的功能,非常强大,看你怎么使用了,在此仅抛砖引玉。我们需要在我们的项目中添加两个dll文件的引用,分别为:

Microsoft.SqlServer.ConnectionInfo.dll

Microsoft.SqlServer.Management.Sdk.Sfc.dll

如下图所示:

  

 

引用了上面两个dll文件后,在我们的项目中添加命名空间:

using Microsoft.SqlServer.Management.Common;

using Microsoft.SqlServer.Management.Smo;

现在,我们就可以使用MSSQLSERVER提供的类库来生成表的CREATE语句了。

下面给出创建的全部代码:

复制代码
     private void ScriptOption()
        {
            scriptOption.ContinueScriptingOnError = true;
            scriptOption.IncludeIfNotExists = true;
            scriptOption.NoCollation = true;
            scriptOption.ScriptDrops = false;
            scriptOption.ContinueScriptingOnError = true;
            //scriptOption.DriAllConstraints = true;
            scriptOption.WithDependencies = false;
            scriptOption.DriForeignKeys = true;
            scriptOption.DriPrimaryKey = true;
            scriptOption.DriDefaults = true;
            scriptOption.DriChecks = true;
            scriptOption.DriUniqueKeys = true;
            scriptOption.Triggers = true;
            scriptOption.ExtendedProperties = true;
            scriptOption.NoIdentities = false;
        }

        /// <summary>
        /// 生成数据库类型为SqlServer指定表的DDL
        /// </summary>
        private void GenerateSqlServerDDL()
        {
            //对于已经生成过的就不用再次生成了,节约资源。
            if (!string.IsNullOrEmpty(textEditorDDL.Text) && textEditorDDL.Text.Trim().Length > 10)
            {
                return;
            }

            ScriptOption();
            ServerConnection sqlConnection = null;
            try
            {
                StringBuilder sbOutPut = new StringBuilder();
                
                if (dbSet.ConnectStr.ToLower().Contains("integrated security")) //Windows身份验证
                {
                    sqlConnection = new ServerConnection(dbSet.Server);
                }
                else        //SqlServer身份验证
                {
                    string[] linkDataArray = dbSet.ConnectStr.Split(';');
                    string userName = string.Empty;
                    string pwd = string.Empty;
                    foreach (string str in linkDataArray)
                    { 
                        if(str.ToLower().Replace(" ","").Contains("userid="))
                        {
                            userName = str.Split('=')[1];
                        }

                        if (str.ToLower().Replace(" ", "").Contains("password"))
                        {
                            pwd = str.Split('=')[1];
                        }
                    }

                    sqlConnection = new ServerConnection(dbSet.Server,userName,pwd);
                }

                Server sqlServer = new Server(sqlConnection);
                Table table = sqlServer.Databases[dbSet.DbName].Tables[txtName.Text];
                string ids;
                //编写表的脚本
                sbOutPut = new StringBuilder();
                sbOutPut.AppendLine();
                sCollection = table.Script(scriptOption);

                foreach (String str in sCollection)
                {
                    //此处修正smo的bug
                    if (str.Contains("ADD  DEFAULT") && str.Contains("') AND type = 'D'"))
                    {
                        ids = str.Substring(str.IndexOf("OBJECT_ID(N'") + "OBJECT_ID(N'".Length, str.IndexOf("') AND type = 'D'") - str.IndexOf("OBJECT_ID(N'") - "OBJECT_ID(N'".Length);
                        sbOutPut.AppendLine(str.Insert(str.IndexOf("ADD  DEFAULT") + 4, "CONSTRAINT " + ids));
                    }
                    else
                        sbOutPut.AppendLine(str);

                    sbOutPut.AppendLine("GO");
                }

                //生成存储过程
                this.textEditorDDL.SetCodeEditorContent("SQL", sbOutPut.ToString());
                this.textEditorDDL.SaveFileName = this.TableName + ".sql";
                sbOutPut = new StringBuilder();
            }
            catch (Exception ex)
            {
                LogHelper.WriteException(ex);
            }
            finally
            {
                sqlConnection.Disconnect();
            }
        }
复制代码

 

说明:textEditorDDL为显示生成表CREATE语句后的控件。

欢迎讨论其他方法,谢谢!

如果觉得对你有引导与帮助,可以点下推荐,谢谢!



作者: EricHu
出处: http://blog.csdn.net/chinahuyong
Email: 406590790@qq.com
QQ 交流:406590790 :16653241
平台博客:   【CSDN】http://blog.csdn.net/chinahuyong
         【CNBLOGS】http://www.cnblogs.com/huyong
关于作者:高级工程师、信息系统项目管理师、DBA。专注于微软平台项目架构、管理和企业解决方案,多年项目开发与管理经验,曾多次组织并开发多个大型项目,精通DotNet,DB(SqlServer、Oracle等)技术。熟悉Java、Delhpi及Linux操作系统,有扎实的网络知识。在面向对象、面向服务以及数据库领域有一定的造诣。现从事DB管理与开发、WinForm、WCF、WebService、网页数据抓取以及ASP.NET等项目管理、开发、架构等工作。
如有问题或建议,请多多赐教!
本文版权归作者和CSDN博客共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过邮箱或QQ 联系我,非常感谢。

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    CodeSmith的批量生成数据库表创建脚本的模板

    总结来说,CodeSmith的批量生成数据库表创建脚本的模板功能是通过自定义.CST模板文件,结合SQL Server的元数据信息,自动化生成CREATE TABLE SQL语句的过程。这大大提高了开发效率,减少了手动编写脚本的时间和错误...

    sqlserver表数据生成insertsql脚本(导出成insertsql脚本).pdf

    这个脚本将包括CREATE TABLE语句,以便在目标数据库中创建相同的表结构。同时,脚本还将包括INSERT INTO语句,以便将数据插入到目标表中。 INSERT SQL脚本的应用场景 生成INSERT SQL脚本的应用场景非常广泛,例如...

    vb.net,脚本创建数据库,.sql脚本创建数据库

    本文将深入探讨如何使用VB.NET编写脚本来创建SQL Server数据库,以及如何利用.sql脚本来自动化这个过程。 首先,让我们理解VB.NET中的数据库连接。VB.NET提供了System.Data.SqlClient命名空间,该命名空间包含了一...

    SQL语句进行数据库权限设置

    本主题将深入探讨如何使用SQL语句进行数据库权限设置,以及SQL Server中的权限层次结构。 首先,我们需要理解SQL Server中的权限体系。权限分为两大类:对象权限和服务器权限。对象权限针对数据库内的具体对象,如...

    SQLServer数据库表中数据导出成SQL语句工具

    针对这个需求,存在一种名为“SQLServer数据库表中数据导出成SQL语句工具”的实用程序,它能够帮助我们高效地完成这项任务。这个工具通常以MHT(Multi-Part/Related)格式提供,这是一种单一文件Web页面存储格式,...

    sqlserver 导出表及字段说明脚本.rar

    这个压缩包"sqlserver 导出表及字段说明脚本.rar"包含了一个名为"sqlserver 导出表及字段说明脚本.sql"的文件,这通常是一个用于生成SQL语句的脚本,用于描述数据库中的表结构以及各字段的详细信息。以下是对这个...

    从SQLServer数据库导出SQL语句的程序

    4. 生成SQL脚本:点击“导出”或类似按钮,程序会自动生成一个包含所有选定对象的SQL脚本文件,这个文件就是`从SQLServer数据库导出SQL语句.exe`。 5. 使用和保存脚本:生成的SQL脚本可以保存到本地,供后续在其他...

    json转换为SQL server建表脚本

    在开发过程中,有时我们需要将JSON数据转化为SQL Server的建表脚本,以便在数据库中创建相应的表结构来存储这些数据。 标题"json转换为SQL server建表脚本"涉及到的主要知识点包括: 1. JSON解析:首先,你需要...

    生成提取表中数据的sql脚本

    根据给定的信息,本文将详细解释如何生成一个用于提取数据库表中数据的SQL脚本,并且探讨了在SQL Server环境中创建此类脚本的一些关键步骤和技术要点。 ### SQL Server中的数据提取脚本 #### 标题解析 - **生成...

    用于创建ASP.NET身份数据库SQL脚本

    压缩包中的文件"SQL-script-for-creating-an-ASP-NET-Identity-Databa.pdf"很可能是详细的SQL脚本文件,包含了一系列CREATE TABLE语句,用于定义ASP.NET Identity所需的数据表结构。这些脚本通常会创建以下核心表: ...

    SQLSERVER如何使用脚本生成表

    在SQL Server中,生成表的脚本是一种常见的数据库管理任务,尤其在数据库设计、备份或复制表结构到其他环境时非常有用。以下是一份详细的指南,教你如何在SQL Server中通过脚本创建表。 首先,我们可以使用SQL ...

    c# 开源运行根据sql脚本生成sql2005数据库

    2. 编写SQL脚本:SQL脚本包含了创建数据库、表、索引、视图、存储过程等数据库对象的语句。例如,`CREATE DATABASE MyDatabase`用于创建数据库,`CREATE TABLE TableName`用于创建表。 3. 执行SQL脚本:使用...

    SQL Server总结数据库脚本

    创建一个新的SQL Server数据库,可以使用`CREATE DATABASE`语句。例如: ```sql CREATE DATABASE MyDatabase ON PRIMARY ( NAME = MyDatabase_Data, FILENAME = 'C:\SQLData\MyDatabase.mdf', SIZE = 5MB, ...

    根据word文档生成SQL语句(SQLServer) 及 实体类

    在日常工作中,我们经常需要根据业务需求创建对应的数据库结构,这通常涉及到编写SQL语句来定义表的结构。在大型项目中,这种工作量可能会非常大,因此,自动化工具的使用可以显著提高效率。本主题将深入探讨如何...

    zktime5.0考勤机连接sqlserver数据库,创建及连接方法.pdf

    2. 数据库创建:在sqlserver中,创建数据库需要使用sql语句,例如“CREATE DATABASE”语句,用于创建一个新的数据库。 3. 数据库连接:zktime5.0考勤机需要连接sqlserver数据库,以便存储和读取考勤数据,该连接...

    sqlserver 批量创建表

    在SQL Server中,批量创建表是一项常见的数据库管理任务,尤其在构建数据库结构或者进行数据迁移时。本场景中,我们关注的是如何利用SQL Server 2008来实现这一目标。这里有两个关键文件:`SQL批量插入数据.sql` 和 ...

    quartz创建表sql

    对于SQL Server,你可以通过SQL Server Management Studio或其他支持SQL Server的工具来执行创建表的SQL脚本。SQL Server的语法与Oracle和MySQL有所不同,比如主键的定义、默认值的设定等。确保使用与SQL Server兼容...

    MS SQL Server数据库快捷生成表结构语句

    本文将详细讲解如何利用SQL Server管理工具和T-SQL语句来快速生成表结构的创建语句。 一、SQL Server Management Studio (SSMS) 生成表结构 SQL Server Management Studio是微软提供的一个强大的数据库管理和开发...

    用sql脚本创建sqlserver数据库范例语句

    ### 创建SQL Server数据库及表的SQL脚本知识点详解 #### 一、概述 本文将详细介绍如何使用SQL脚本来创建SQL Server数据库以及相应的数据表。通过分析提供的SQL脚本示例,我们将深入理解创建数据库和表的基本语法...

    Sql Server 创建数据库脚本Create DATABASE

    在介绍如何使用Sql Server创建数据库脚本Create DATABASE之前,我们首先需要了解数据库在信息系统中的重要性。数据库是存放数据的仓库,它能够安全地存储、管理以及提供数据的访问。在Sql Server这一关系型数据库...

Global site tag (gtag.js) - Google Analytics