sql >> データベース >  >> RDS >> Sqlserver

SQL Serverシステムメッセージから戻り値を取得するにはどうすればよいですか?

    情報メッセージ(重大度が10未満)とPRINT出力がクライアントに返され、InfoMessageとして生成されます。 SqlConnectionによるイベント 実例。各イベントには、SqlErrorのコレクションが含まれています オブジェクト(これはSqlException.Errorsで使用されるのと同じクラスです 。

    これは、接続状態の変更、情報メッセージ、および例外を示す完全な例です。 ExecuteReaderを使用していることに注意してください ExecuteNonQueryの代わりに 、ただし、情報と例外の結果は同じです。

    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. SQL Server認証とWindows認証:どちらをいつ使用するか

    2. MySQLに接続すると、エラーが発生しますデータソース名が見つからず、デフォルトのドライバが指定されていません

    3. MySQL。期間内に販売されていない製品

    4. PostgreSQLのLISTAGG(Oracleデータベース)に相当するものは何ですか?