如何从C#代码后面生成sql脚本文件?

时间:2009-10-16 08:48:25

标签: c# asp.net sql-server scripting

如何从C#codebehind生成sql脚本文件?该脚本文件将包含db中storedproc的 create drop 语句。

如何在C#中从db生成脚本并写入.sql文件?

是否可以在C#

中从db生成表或createproc的create / drop语句脚本

请帮忙。

5 个答案:

答案 0 :(得分: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);

此代码摘录摘自Bill Graziano的文章Scripting Database Objects using SMO

答案 1 :(得分:1)

如果我理解你的问题,那么你可能会比你提出的方法更安全,更容易地做你想做的事情。例如,您可以在代码中构建SQL语句,设置SQLCommand对象,并直接执行SQL语句。

答案 2 :(得分: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个文件。

答案 3 :(得分:-1)

如果您知道表的架构,但只是更改表的名称,则需要获取CREATE脚本的副本(可以很容易地从sql management studio获取)并将其放入代码中-behind文件,然后使用文本编写器或其他东西将其保存为.sql文件...

答案 4 :(得分:-1)

我并不真正掌握SQL Server的知识,但以下查询的结果可能会对您有所帮助:

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