2011-06-25 10 views
8

मैं सोच रहा था कि फ्लाई पर सदस्यता स्कीमा इंस्टॉल करने का सबसे अच्छा तरीका क्या होगा।सी # प्रोग्रामेटिक रूप से एएसपी.NET सदस्यता स्कीमा

अभी जिस समाधान का मैं सोच रहा हूं वह किसी भी तरह से aspnet_regsql.exe को मेरे डीबी कनेक्शन पर निष्पादित करने के लिए तर्कों के साथ चलाना है।

मैं इसे कैसे पूरा कर सकता हूं? क्या कोई बेहतर तरीका है?

उत्तर

8

ठीक है, मुझे इसे पूरा करने के लिए एक बेहतर तरीका मिला है, मैं अभी भी MembershipExists() फ़ंक्शन का उपयोग करता हूं, लेकिन मैं इसे इस कथन के साथ स्थापित करता हूं, जिसे मैं कुछ मिनट पहले तक नहीं जानता था।

SqlServices.Install(database, SqlFeatures.All, connectionString); 
2

इस तरह यह क्या:

public static void Initialize() 
    { 
     var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["membership"].ConnectionString); 

     if (!MembershipExists(connection)) 
     { 
      // create schema 
      string regsql = Path.Combine(System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory(), "aspnet_regsql.exe"); 
      string args = string.Format(@"-E -S {0} -A all -d {1}", connection.DataSource, connection.Database); 

      var proc = Process.Start(regsql, args); 
      if (proc != null) 
       proc.WaitForExit(); 
     } 
    } 

    public static bool MembershipExists(SqlConnection connection) 
    { 
     try 
     { 
      connection.Open(); 
      var query = new SqlCommand("select count(*) from sysobjects where name = 'aspnet_CheckSchemaVersion' and type = 'P'", connection); 
      return query.ExecuteScalar() as int? == 1; 
     } 
     finally 
     { 
      connection.Close(); 
     } 
    } 

सुनिश्चित नहीं हैं कि यह कैसे उत्पादन परिवेश पर उनके व्यवहार करेंगे।