Reseting SQL Application role after the connection has been closed

153 Views Asked by At

I'm using sql application roles from a .net application. I have an issue which occurs when the connection is lost. So as an example I have this block of code which opens a connection, sets the app role, does a select from the database and the disposes my connection. If I run this code a 2nd time it fails when trying to set the app role again (the ExecuteNonQuery() line for the sys.sp_setapprole).

The exception is an SqlException: A severe error occurred on the current command. The results, if any, should be discarded.

I've tried using the @fCreateCookie parameter and calling sys.sp_unsetapprole to reset the role but this makes no difference.

Help please?

using (SqlConnection connection = new SqlConnection(myConnectionString))
        {
            connection.Open();

            using (SqlCommand command = new SqlCommand("sys.sp_setapprole", connection))
            {
                command.CommandType = CommandType.StoredProcedure;
                command.Parameters.AddWithValue("@rolename", "MyRole");
                command.Parameters.AddWithValue("@password", "MyPassword");

                command.ExecuteNonQuery();
            }

            try
            {
                DataSet ds = new DataSet();

                using (SqlCommand command = new SqlCommand("dbo.MyProcedure", connection))
                using (SqlDataAdapter adapter = new SqlDataAdapter(command))
                {
                    command.CommandType = CommandType.StoredProcedure;
                    adapter.Fill(ds);                        
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
0

There are 0 best solutions below