SSMS
 sql >> Teknologi Basis Data >  >> Database Tools >> SSMS

C# Menangani pada Output Pesan SQL Server

Berikut adalah contoh kode yang saya coba dan berhasil untuk saya.http://www. dotnetcurry.com/ShowArticle.aspx?ID=344

Perhatikan kode yang Anda butuhkan sebenarnya adalah bagian ini:

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

Itu e.Message terus mengembalikan pesan kembali ke txtMessages (Anda dapat mengganti sebagai TextBox atau Label).

Anda juga dapat merujuk ke artikel ini:Cadangkan Database SQL Server dengan kemajuan

Contoh kode saya adalah sebagai berikut:

//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;
}

Agar bilah kemajuan berfungsi, Anda perlu mengimplementasikan ini dengan pekerja latar, yang aplikasi Anda tidak akan membeku dan 100% selesai secara tiba-tiba.



  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. Hasil salin tempel Microsoft SQL Server ke excel tidak berfungsi

  2. Alternatif Mac untuk studio manajemen server SQL?

  3. Temukan perbedaan waktu antara dua baris berturut-turut dalam tabel yang sama di sql

  4. Klien SQL Server sederhana yang layak

  5. Perbarui kueri dibatalkan oleh pengguna