2009-10-16 49 views
2

如何从C#代码隐藏生成sql脚本文件?该脚本文件将包含创建下降声明一个storedproc在数据库中。如何从C#代码隐藏生成sql脚本文件?

如何从C#中的数据库生成脚本并写入.sql文件?

是否有可能生成创建脚本,并从数据库在C#

请帮忙删除表或storedproc的声明。

回答

1

,如果我理解正确的话,建立一个SqlCommand对象具有以下

using (SqlConnection con = new SqlConnection ("Connection String Here")) 
{ 
    using (SqlCommand cmd = con.CreateCommand()) 
    { 
     cmd.CommandText = "sp_helptext @procName"; 
     cmd.CommandType = CommandType.Text; 

     cmd.Parameters.AddWithValue("procName", "Name Of Stored Proc Here"); 

     con.Open(); 

     using (SqlDataReader rdr = cmd.ExecuteReader()) 
     { 
      while (rdr.Read()) 
      { 
       /* 
        You will get the CREATE PROC text here 
        Do what you need to with it. For example, write 
        to a .sql file 
       */ 
      } 
     } 
    } 
} 

这将返回存储过程的文本,作为CREATE PROC语句,结果集中结果集的每一行都是存储过程的一行。

要创建DROP PROC声明,简单地写出来

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'procName') AND type in (N'P', N'PC')) 
DROP PROC procName 

.sql文件。

+0

太好了。但是你能帮助我,这样我就可以为表,函数,视图生成声明吗?请帮忙。 – Himadri

+0

这真的帮了我。现在我需要为表生成create语句。我能够为视图函数和sp生成语句,但不能为表生成。请帮忙。 – Himadri

+0

我不知道一个系统存储过程,它会将''sp_helptext''用于用户定义的函数,sporcs或视图(包括其他对象),或者你可以在SSMS中使用“Script As ...” “ 选项。在Sql Profiler中查看当在SSMS中使用该选项时会发生什么情况,可能会为表提供一种方法。 –

-1

如果你知道表的模式,但你只是改变表的名字,你需要获得CREATE脚本的副本(可以很容易地从sql管理工作室获得),然后把它放到你的代码隐藏文件,然后将其保存为使用文本作家什么的.sql文件...

1

如果我正确理解你的问题,可能有一个更安全,更简单的方法做你想要什么比你的方法提议。例如,您可以使用代码构建SQL语句,设置SQLCommand对象,并直接执行SQL语句。

+0

我想使用C#从数据库中获取storedproc的create语句。我需要来自db的create语句将从C#代码隐藏中生成。 – Himadri

+0

是否要创建SQL语句或从数据库中检索现有的存储过程? –

+0

我不想从sql server management studio复制创建语句,但我想使用sqlcommand在C#代码隐藏中获取create语句。这些语句不会插入到由我创建的数据库表中。系统表可以帮助或任何其他选项将被appriciated – Himadri

-1

我真的没有在SQL Server中的知识,但以下查询的结果可能会帮助您:

select * from information_schema.columns 
select * from information_schema.tables 
select * from sysobjects 
3

您正在查找SQL Management Objects (SMO) - 用于使用SQL Server的.NET库。

你想要完成的是相当直接的。为您即时存储过程问题的C#代码是一样的东西(你写剧本到.SQL文本文件,而不是控制台)

Server theServer = new Server("myServerName"); 
Database myDB = theServer.Databases["myDatabaseName"]; 

StoredProcedure sp = myDB.StoredProcedures["mySprocName", "dbo"]; 

StringCollection sc = sp.Script(); 

foreach (string s in sc) 
    Console.WriteLine(s); 

此代码摘录由比尔·格拉济阿诺

题为 Scripting Database Objects using SMO的文章取