利用.NET生成数据库表的创建脚本,类似SqlServer编写表的CREATE语句
2014-07-25 15:50
811 查看
(喷血分享)利用.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文件后,在我们的项目中添加命名空间:
现在,我们就可以使用MSSQLSERVER提供的类库来生成表的CREATE语句了。
下面给出创建的全部代码:
说明:textEditorDDL为显示生成表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语句后的控件。
相关文章推荐
- (喷血分享)利用.NET生成数据库表的创建脚本,类似SqlServer编写表的CREATE语句
- (喷血分享)利用.NET生成数据库表的创建脚本,类似SqlServer编写表的CREATE语句
- 利用.NET生成数据库表的创建脚本,类似SqlServer编写表的CREATE语句
- (喷血分享)利用.NET生成数据库表的创建脚本,类似SqlServer编写表的CREATE语句
- (喷血分享)利用.NET生成数据库表的创建脚本,类似SqlServer编写表的CREATE语句
- powerdesigner中去掉Oracle生成的SQL创建语句中的双引号后再次生成sql的脚本导入数据库中产生的异常问题
- 脚本:SQLServer 2008 生成某数据库中的所有索引创建脚本
- 数据库生成脚本-------创建语句的同时,把表中的数据也生成插入语句
- SQLServer 利用profiler生成脚本在后台跟踪堵塞语句或慢查询语句
- SQLServer 利用profiler生成脚本在后台跟踪堵塞语句或慢查询语句
- 从已有数据库生成脚本来获得生成数据表、视图、函数、存储过程以及触发器的SQL语句
- SQL语句创建数据库表介绍以及在.net中创建介绍!
- java调用mysql的工具类实现数据库远程备份,还原,生成创建表的sql脚本
- sqlserver 数据库 里面有数据 怎么生成 插入语句 把里面的数据
- NBear - 使用Entity Configurator设置实体元数据、生成数据库创建脚本
- 利用DBMS_ADVISOR.TUNE_MVIEW包生成物化视图创建语句
- NBear - 使用Entity Configurator设置实体元数据、生成数据库创建脚本
- 数据库的创建,修改和删除----利用企业管理器和T-SQL语句
- 利用.net 2.0中的TreeView控件与数据库绑定,生成无限级的树目录
- 收藏:如何根据当前MDB中的表生成对应的JET SQL DDL “CREATE TABLE”语句/脚本?