Программа зависает бесконечно при вызове MySqlConnection.Open()
Я использую MySqlConnection для доступа к удаленной базе данных. Он отлично работает на большинстве компьютеров.
Тем не мение. Теперь у меня есть случай, в котором вызов MySqlConnection.Open() зависает навсегда. Я добавил несколько операторов write, чтобы увидеть, где он висит. Смотрите код ниже. Оператор "_Debug.Write("OpenConnection", " Соединение установлено.");" никогда не достигается Также не исключение не выбрасывается. Я пытался запустить приложение от имени администратора, но оно все еще висит здесь. Это должно быть проблемой среды, так как она отлично работает на всех других компьютерах. (Я использую.NET Framework 3.5)
У кого-нибудь есть решение для этого? Я надеюсь, что это так. С наилучшими пожеланиями Роб Baaij ---------------------------------------------------- мой C# исходный код частного подключения MySqlConnection; приватная строка _server = "Сервер =5.666.82.191; База данных = неизвестно;Uid=me;Pwd=mypasswd";
public void getUserData()
{
using (connection = new MySqlConnection(_server))
{
if (OpenConnection())
{
getData();
connection.Close();
}
}
}
private bool OpenConnection()
{
bDatabaseConnectionSucceeded = false;
try
{
_Debug.Write("OpenConnection", "Opening connection now!!");
connection.Open();
bDatabaseConnectionSucceeded = true;
_Debug.Write("OpenConnection", "Connection succeeded.");
return true;
}
catch (MySqlException ex)
{
_Debug.Write("OpenConnection", "Connection failed." + ex.Message);
Debug.WriteLine(ex.Message);
return false;
}
}
1 ответ
Вам не нужно делать
connection.close();
Это избыточно, так как оно создано вusing
блок.Зачем ждать открытия соединения? Почему бы не раскрутить другой поток, который вы ожидаете в текущем потоке? Если он не отвечает, вы можете оставить без забот и повторить попытку позже.
Это особенно полезно, если вы подключаетесь к удаленному серверу и теряете интернет-соединение. connnection.open()
не будет зависать бесконечно, но он будет висеть на своей нити в течение нежелательного периода времени.