How to detect whether the connection to SQL Server is broken or not

 

For managed code, use SqlConnection’s StateChange event:

 

        static void Main(string[] args)
        {
            SqlConnection conn = new SqlConnection();

            conn.StateChange += ConnStateChangeEventHandler;

            conn.ConnectionString = "server=yourServerName; uid=yourUserName; pwd=xxxx; database=northwind";

            conn.Open();

            try
            {
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;
                cmd.CommandText = "select * from customer";

                cmd.ExecuteNonQuery();
            }
            catch (SqlException ex)
            {
                Console.WriteLine(ex.Message);
            }

            Console.ReadKey();

        }

        private static void ConnStateChangeEventHandler(Object sender, StateChangeEventArgs args)
        {
            Console.WriteLine("old state: {0}, new state: {1}", args.OriginalState, args.CurrentState);
        }

 

For ODBC application, use SQLGetConnectAttr to check the SQL_COPT_SS_CONNECTION_DEAD attribute:

 

UINT connection_state = SQL_CD_FALSE;
 
// check if the connection is broken
SQLGetConnectAttr(hdbc, SQL_COPT_SS_CONNECTION_DEAD, &connection_state, SQL_IS_UINTEGER, NULL);

if (connection_state == SQL_CD_TRUE )
{
    cout << “connection broken” << endl;
}