using (SqlCommand cmd = new SqlCommand(sql, conn))

In the stored procedure, use local variables or OPTION (RECOMPILE) :

cmd.CommandTimeout = 300; // seconds cmd.ExecuteNonQuery();