Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm cách nào để nhận giá trị trả về từ thông báo hệ thống Sql Server?

Thông báo cung cấp thông tin (với mức độ nghiêm trọng nhỏ hơn 10) và đầu ra PRINT được trả lại cho máy khách và được nâng lên dưới dạng InfoMessage sự kiện của SqlConnection ví dụ. Mỗi sự kiện chứa một tập hợp SqlError các đối tượng (đây là cùng một lớp được sử dụng trong SqlException.Errors ).

Dưới đây là một ví dụ đầy đủ cho thấy các thay đổi trạng thái kết nối, thông báo thông tin và các trường hợp ngoại lệ. Lưu ý rằng tôi sử dụng ExecuteReader thay vì ExecuteNonQuery , nhưng thông tin và kết quả ngoại lệ giống nhau.

namespace Test
{
    using System;
    using System.Data;
    using System.Data.SqlClient;

    public class Program
    {
        public static int Main(string[] args)
        {
            if (args.Length != 2)
            {
                Usage();
                return 1;
            }

            var conn = args[0];
            var sqlText = args[1];
            ShowSqlErrorsAndInfo(conn, sqlText);

            return 0;
        }

        private static void Usage()
        {
            Console.WriteLine("Usage: sqlServerConnectionString sqlCommand");
            Console.WriteLine("");
            Console.WriteLine("   example:  \"Data Source=.;Integrated Security=true\" \"DBCC CHECKDB\"");
        }

        public static void ShowSqlErrorsAndInfo(string connectionString, string query)
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.StateChange += OnStateChange;
                connection.InfoMessage += OnInfoMessage;

                SqlCommand command = new SqlCommand(query, connection);
                try
                {
                    command.Connection.Open();
                    Console.WriteLine("Command execution starting.");
                    SqlDataReader dr = command.ExecuteReader();
                    if (dr.HasRows)
                    {
                        Console.WriteLine("Rows returned.");
                        while (dr.Read())
                        {
                            for (int idx = 0; idx < dr.FieldCount; idx++)
                            {
                                Console.Write("{0} ", dr[idx].ToString());
                            }

                            Console.WriteLine();
                        }
                    }

                    Console.WriteLine("Command execution complete.");
                }
                catch (SqlException ex)
                {
                    DisplaySqlErrors(ex);
                }
                finally
                {
                    command.Connection.Close();
                }
            }
        }

        private static void DisplaySqlErrors(SqlException exception)
        {
            foreach (SqlError err in exception.Errors)
            {
                Console.WriteLine("ERROR: {0}", err.Message);
            }
        }

        private static void OnInfoMessage(object sender, SqlInfoMessageEventArgs e)
        {
            foreach (SqlError info in e.Errors)
            {
                Console.WriteLine("INFO: {0}", info.Message);
            }
        }

        private static void OnStateChange(object sender, StateChangeEventArgs e)
        {
            Console.WriteLine("Connection state changed: {0} => {1}", e.OriginalState, e.CurrentState);
        }
    }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Xóa bản ghi khỏi tập dữ liệu và máy chủ sql

  2. Có thể sử dụng `SqlDbType.Structured` để chuyển các Tham số Giá trị Bảng trong NHibernate không?

  3. SQL Server - Điều gì xảy ra khi một hàng trong bảng được cập nhật?

  4. Cách thoát đúng các số nhận dạng được phân tách trong SQL Server mà không sử dụng QUOTENAME

  5. Khung thực thể - Lấy độ dài của dữ liệu trong một cột văn bản