2009-10-16 46 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的文章取