none
Клиент-сервер и MySql RRS feed

  • Вопрос

  • Такая проблема, есть клиент и сервер, клиент посылает запрос, в котором сервер должен создать в БД таблицу или строку. Но как только пытаемся открыть доступ к MySql? сервер перестает отвечать на запросы, но не зависает.

    Dim Cnn As New ADODB.Connection
    Dim Rec As New ADODB.Recordset
    strConn = "Driver={MySQL ODBC 5.1 Driver};Server=" & SqlHost.Text & ";Port=" & SqlPort.Text & ";Database=" & SqlBD.Text & ";User=" & SqlUser.Text & "; Password=" & SqlPass.Text & ";Option=3"
    Cnn.ConnectionString = strConn
    Cnn.Open()

    Происходит это именно после этой строки: Cnn.Open()

     В чем может быть причина, помогите пожалуйста

    2 января 2011 г. 21:49

Ответы

Все ответы

  • Попробуйте скачать и использовать официальный поставщик данных MySql
    E-mail: Svatoslav.Pankratov@gmail.com
    3 января 2011 г. 9:11
  • Хорошо попробую. Но в другой программе, и с этим все отлично работало... Может быть это из за потока? При загрузке сервера начинается ожидание входящих подключений с отдельного потока:


    Private Sub General_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    listenerThread = New Threading.Thread(AddressOf DoListen)
    listenerThread.Start()
      UpdateStatus("Сервер запущен!")
    End Sub

     Private Sub DoListen()
    Try
       listener = New TcpListener(System.Net.IPAddress.Any, PORT_NUM)
    listener.Start()
    Do
      'Создаем новое пользовательское подключение используя TcpClient
    Dim client As New UserConnection(listener.AcceptTcpClient)

    AddHandler client.LineReceived, AddressOf OnLineReceived
    UpdateStatus("Новое подключение: ожидается авторизация")
    Loop Until False
    Catch
    End Try
    End Sub

    После этого начинается асинхронное чтение... главное сервер перестает отвечать только на команды этого клиента, который подал запрос на создание таблицы в БД, если подключить еще один клиент, он нормально с ним работает. И еще. С оффициальным поставщиком так же работать? Или по другому надо подключаться?

    3 января 2011 г. 9:41
  • Попробуйте для начала выполнить просто подключение к СУБД и выполнить простенький запрос, без использования дополнительных потоков. Например, что-то вроде этого примера:

     

    Dim conn As New MySqlConnection
    Dim cmd As New MySqlCommand
    
    conn.ConnectionString = strConnection
    
    Try
     conn.Open()
     cmd.Connection = conn
    
     cmd.CommandText = "INSERT INTO myTable VALUES(NULL, @number, @text)"
     cmd.Prepare()
    
     cmd.Parameters.AddWithValue("@number", 1)
     cmd.Parameters.AddWithValue("@text", "One")
    
     For i = 1 To 1000
      cmd.Parameters("@number").Value = i
      cmd.Parameters("@text").Value = "A string value"
    
      cmd.ExecuteNonQuery()
      Next
    Catch ex As MySqlException
     MessageBox.Show("Error " & ex.Number & " has occurred: " & ex.Message, "Error", 
    	MessageBoxButtons.OK, MessageBoxIcon.Error)
    End Try

     

    И еще. С оффициальным поставщиком так же работать? Или по другому надо подключаться?

    Там, на указанной выше мной странице, есть ссылка на документацию. Там все написано, с примерами.
    E-mail: Svatoslav.Pankratov@gmail.com
    3 января 2011 г. 9:50
  • Спасибо, но я плох в английском, не понял даже какие библиотеки подключать... И как видно по вашему примеру тут совсем по другому все. Я пользовался, да и пользуюсь не Connector/NET а Connector/ODBC. Уже привык в нем работать. Может можно как то через ODBC? Или это из за него не хочет работать? 
    3 января 2011 г. 10:16
  • Спасибо, но я плох в английском, не понял даже какие библиотеки подключать... И как видно по вашему примеру тут совсем по другому все. Я пользовался, да и пользуюсь не Connector/NET а Connector/ODBC. Уже привык в нем работать. Может можно как то через ODBC? Или это из за него не хочет работать? 

    На счет английского, можно через переводчик гугла прогнать страницу целеком, если есть проблемы с английским =)

    А на счет ODBC, попробуйте без потоков написать похожий пример для него, чтобы убедиться, что все нормально работает. То есть просто подключиться и выполнить простенький запрос, после чего проверить корректное его выполнение.

    P.S.: У меня когда-то была проблема при подключении к БД Paradox. Проблема решилась запуском Visual Studio от администратора.


    E-mail: Svatoslav.Pankratov@gmail.com
    3 января 2011 г. 10:21
  • Без потока работает отлично. Ставлю выполнение Sub при загрузке формы, создает таблицу и заполняет... Вообще ничего не пойму...
    3 января 2011 г. 10:26
  • Можете по шагам расписать задуманную логику и выложить полный код этой логики? Возможно, где-то в коде есть ошибка.
    E-mail: Svatoslav.Pankratov@gmail.com
    3 января 2011 г. 10:41
  • От чего это может быть? Может исходник выслать?
    • Предложено в качестве ответа Svyatoslav Pankratov 3 января 2011 г. 10:44
    3 января 2011 г. 10:42
  • От чего это может быть? Может исходник выслать?

    У меня MySql не стоит. Выложите исходник сюда, может кто еще что-нибудь заметит.

    P.S.: Сори, нечаянно щелкнул по кнопке "предложить как ответ".


    E-mail: Svatoslav.Pankratov@gmail.com
    3 января 2011 г. 10:46
  • Все я кажется разобрался. Необходимо вызывать процедуру подключения к БД через новый поток. Получается поток в потоке. Осталось решить почему этот поток повторяется по многу раз. Как то можно закрыть текущий поток или остановить?
    3 января 2011 г. 11:05
  • Да. Поток можно остановить, вызвав метод Abort.
    E-mail: Svatoslav.Pankratov@gmail.com
    • Помечено в качестве ответа Siompc 3 января 2011 г. 11:18
    3 января 2011 г. 11:17