C # و SMO - احصل على إخراج الرسائل مثل "الجدول موجود بالفعل" لتسجيل الدخول

StackOverflow https://stackoverflow.com/questions/1486682

  •  18-09-2019
  •  | 
  •  

سؤال

أنا أستخدم كائنات إدارة SQL للاتصال بخادم SQL. في الوقت الحالي، تحتوي على أوامر "إنشاء جدول" بسيطة على سبيل المثال.

قمت بتشغيل هذا الرمز مرتين عن قصد للتسبب في خطأ "الجدول موجود بالفعل".

ومع ذلك لا يتم تشغيل أحداثي أدناه.

أي شخص حصل على أي أفكار، وكيف يمكنني الحصول على هذه الرسالة في التعليمات البرمجية الخاصة بي، ثم تغيير التنفيذ إلى إيقاف الأخطاء التي تسبب الاستثناءات (التي لا أريد القيام بها، أريد أن أستمر)

رمز بلدي:

public void executeSomeSQL() {
    FileInfo file = new FileInfo(@"\c:\sqlcommands.sql");
    string script = file.OpenText().ReadToEnd();
    SqlConnection conn = new SqlConnection(sqlConnectionString);
    conn.InfoMessage +=new SqlInfoMessageEventHandler(conn_InfoMessage);
    Server server = new Server(new ServerConnection(conn));
    server.ConnectionContext.InfoMessage += new SqlInfoMessageEventHandler(ConnectionContext_InfoMessage);
    server.ConnectionContext.ExecuteNonQuery(script,ExecutionTypes.ContinueOnError);                
    MessageBox.Show("All Done");
}

الأحداث: -

public void conn_InfoMessage(object sender, SqlInfoMessageEventArgs e) {
    textBox3.Text += "1:"+DateTime.Now.ToString();
}

public void ConnectionContext_InfoMessage(object sender, SqlInfoMessageEventArgs e) {
    textBox3.Text += "2:" + DateTime.Now.ToString();
}
هل كانت مفيدة؟

المحلول

وفق MSDN.:

يحدث حدث Infomessage عندما يتم إرجاع رسالة بشدة 10 أو أقل بواسطة SQL Server. الرسائل التي تحتوي على شدة تتراوح بين 11 و 20 ارفع خطأ ورسائل تحتوي على شدة تزيد عن 20 أسباب إغلاق الاتصال.

شدة الخطأ للحصول على خالق على جدول موجود بالفعل هو 16، والذي يتجاوز حدث Infomessage.

قد ترغب في التفاف TSQL الخاص بك في محاولة ... قبض كتلة واستخدام الرفع. جرب ... Catch Bring يمسك جميع أخطاء التنفيذ بشدة أكبر من 10 لا ينهي اتصال قاعدة البيانات.

أو قد ترغب في إضافة فحص في TSQL الخاص بك لوجود الجدول والقيام بطباعة سيتم رفعها إلى حدث Infomessage الخاص بك.

نصائح أخرى

أنا لست مبرمج (DBA)، لذلك أنا لست متأكدا. أفترض أن كام يكون مفيدا

conn.fireinfomessageeventonuserrors = صحيح؛

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top