SSMS
 sql >> डेटाबेस >  >> Database Tools >> SSMS

सी # SQL सर्वर संदेश आउटपुट पर हैंडल

यहां उदाहरण कोड है जिसे मैंने आजमाया और यह मेरे लिए काम करता है।http://www। dotnetcurry.com/ShowArticle.aspx?ID=344

ध्यान दें कि आपको जिस कोड की आवश्यकता है वह वास्तव में यह हिस्सा है:

cn.Open();
cn.InfoMessage += delegate(object sender, SqlInfoMessageEventArgs e)
{                                    
         txtMessages.Text += "\n" + e.Message;                                   
};

यह e.Message संदेश को txtMessages पर वापस लौटाता रहता है (आप टेक्स्टबॉक्स या लेबल के रूप में प्रतिस्थापित कर सकते हैं)।

आप इस लेख को भी देख सकते हैं:बैकअप SQL सर्वर डेटाबेस के साथ प्रगति

मेरे कोड का एक उदाहरण निम्नलिखित में है:

//The idea of the following code is to display the progress on a progressbar using the value returning from the SQL Server message. 
//When done, it will show the final message on the textbox. 
String connectionString = "Data Source=server;Integrated Security=SSPI;";
SqlConnection sqlConnection = new SqlConnection(connectionString);

public void DatabaseWork(SqlConnection con)
{
    con.FireInfoMessageEventOnUserErrors = true;
    //con.InfoMessage += OnInfoMessage;
    con.Open();
    con.InfoMessage += delegate(object sender, SqlInfoMessageEventArgs e)
    {
        //Use textBox due to textBox has Invoke function. You can also utilize other way. 
        this.textBox.Invoke(
            (MethodInvoker)delegate()
            {
                int num1;
                //Get the message from e.Message index 0 to the length of first ' '
                bool res = int.TryParse(e.Message.Substring(0, e.Message.IndexOf(' ')), out num1);

                //If the substring can convert to integer
                if (res)
                {
                    //keep updating progressbar
                    this.progressBar.Value = int.Parse(e.Message.Substring(0, e.Message.IndexOf(' ')));
                }
                else
                {
                    //Check status from message 
                    int succ;
                    succ = textBox.Text.IndexOf("successfully");
                    //or succ = e.Message.IndexOf("successfully");  //get result from e.Message directly
                    if (succ != -1) //If IndexOf find nothing, it will return -1
                    {
                        progressBar.Value = 100;
                        MessageBox.Show("Done!");
                    }
                    else
                    {
                        progressBar.Value = 0;
                        MessageBox.Show("Error, backup failed!");
                    } 
                }
            }
        );
    };
    using (var cmd = new SqlCommand(string.Format(
        "Your SQL Script"//,
        //QuoteIdentifier(databaseName),
        //QuoteString(Filename)//,
        //QuoteString(backupDescription),
        //QuoteString(backupName)
        ), con))
    {
        //Set timeout = 1200 seconds (equal 20 minutes, you can set smaller value for shoter time out. 
        cmd.CommandTimeout = 1200;
        cmd.ExecuteNonQuery();
    }
    con.Close();
    //con.InfoMessage -= OnInfoMessage;
    con.FireInfoMessageEventOnUserErrors = false;
}

प्रगति पट्टी को काम करने के लिए, आपको इसे पृष्ठभूमि कार्यकर्ता के साथ कार्यान्वित करने की आवश्यकता है, जो आपका आवेदन स्थिर नहीं होगा और अचानक 100% हो जाएगा।



  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. एसएसएमएस:एक्सेल में अलग-अलग टैब में एक ही एसक्यूएल स्क्रिप्ट से कई परिणाम सेट स्वचालित रूप से सहेजते हैं?

  2. SSMS में, मैं SQL क्वेरी विंडो का टैब नाम कैसे बदलूँ?

  3. SQL Server 2014 में Intellisense काम नहीं कर रहा है

  4. SQL Azure:SSMS 2008 R2 में ऑब्जेक्ट्स को स्क्रिप्ट करते समय SMO अपवाद

  5. SQL प्रबंधन स्टूडियो - डेटाबेस आरेख में एक धराशायी / बिंदीदार संबंध रेखा क्या दर्शाती है?