2015-03-13 22 views
0

我想在C#中用編程方式改變存儲過程與SMO。除了改變步驟之外,一切似乎都起作用。連接和存儲過程連接都很好。請幫助,爲什麼它不改變我的數據庫?SMO C#改變失敗現有的存儲過程參數

using System; 
using System.Data; 
using Microsoft.SqlServer.Management.Smo; 
using Microsoft.SqlServer.Management.Common; 

namespace DBChecker 
{ 
    public class A 
    { 

     public static void Main(string[] args) 
     { 

      String sqlServerLogin = "*****"; 
      String password = "****"; 
      String instanceName = ""; 
      String remoteSvrName = "****"; 


      ServerConnection srvConn2 = new ServerConnection(remoteSvrName); 
      srvConn2.LoginSecure = true; 
      Server srv3 = new Server(srvConn2); 
      Console.WriteLine(srv3.Information.Version); 
      Console.WriteLine("Connection Established"); 

      Database db; 
      db = srv3.Databases["decision"]; 
      Console.WriteLine("DB Connection Established"); 

      StoredProcedure sp; 
      sp = new StoredProcedure(db,"copy_alias_by_type"); 
      Console.WriteLine("SP Connection Established"); 

      sp.TextMode = false; 
      sp.AnsiNullsStatus = false; 
      sp.QuotedIdentifierStatus = false; 

      StoredProcedureParameter param; 
      param = new StoredProcedureParameter(sp, "@alstyp"); 

      param.DataType = DataType.Char(100); 
      sp.Refresh(); 
      sp.Alter(); 

      Console.WriteLine("DataType Changed"); 
      Console.ReadKey(); 

     } 

    } 

} 

回答

0

爲什麼沒有得到應用的變化的原因是,雖然你的sp StoredProcedure的基準創建的param StoredProcedureParameter,你從來沒有真正投入作爲存儲過程的參數。 (別擔心,當我看到/意識到這一點時,我也有一個「胡?」時刻)。

更改您的代碼段看起來像這個片段:

StoredProcedureParameter param; 
param = new StoredProcedureParameter(sp, "@alstyp"); 
sp.Parameters.Add(param); // Add the parameter as a parameter to the StoredProcedure 

那麼這將會使,當你調用sp.Alter(),它實際上適用的代碼。

參考:MSDN: Creating, Altering, and Removing Stored Procedures