2013-08-30 2 views
0

У меня есть 2 классаПодключение к базе данных через класс объектов Visual Basic 2010

подключения класса Class

Imports MySql.Data 
Imports MySql.Data.MySqlClient 
Public Class connect 
Dim dbCon As MySqlConnection 
Dim strQuery As String = "" 
Dim SqlCmd As MySqlCommand 
Dim DR As MySqlDataReader 

Public Function Con2Db() As Boolean 

    Try 
     'Prepare connection and query 
     dbCon = New MySqlConnection("Server=localhost; User Id = root; Pwd = 12345; Database = digitallibrary") 
     If dbCon.State = ConnectionState.Closed Then 
      dbCon.Open() 
      Return True 
     Else 
      dbCon.Close() 
      splash.Label1.Text = "Connection is Close" 
      Return False 
     End If 
    Catch ex As Exception 
     MsgBox("FAIL") 
     Return False 
    End Try 

End Function 


End Class 

И запрос

Imports MySql.Data 
Imports MySql.Data.MySqlClient 
Public Class query 
Dim dbCon As MySqlConnection 
Dim strQuery As String = "" 
Dim SqlCmd As MySqlCommand 
Dim DR As MySqlDataReader 
Public Sub insert(ByVal ln As String, ByVal fn As String, ByVal mn As String, ByVal user As String, ByVal email As String, ByVal bdate As String, ByVal jdate As String, ByVal jtime As String, ByVal pwd As String) 
    Try 
     strQuery = "INSERT INTO user_tbl(user_ln,user_fn,user_mn,username,user_email,user_bdate, user_jdate, user_jtime)VALUES('" + ln + "','" + fn + "','" + mn + "','" + user + "','" + email + "','" + bdate + "','" + jdate + "','" + jtime + "');" & _ 
      "INSERT INTO login_tbl(username,password)VALUES('" + user + "','" + pwd + "')" 
     SqlCmd = New MySqlCommand(strQuery, dbCon) 
     SqlCmd.ExecuteNonQuery() 
     dbCon.Close() 

    Catch ex As Exception 
     MsgBox("Error " & ex.Message) 
    End Try 
End Sub 

End Class 

Также Регистрационная форма

Public Class registration 

Private Sub registration_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    Dim con As New connect 
    If (con.Con2Db = True) Then 
     Label13.Text = "Connected To Database" 
    Else 
     Label13.Text = "Not Connected To Database" 
    End If 
End Sub 

Private Sub submit_btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles submit_btn.Click 
    Dim ins As New query 
    Dim ln As String = ln_txt.Text 
    Dim fn As String = fn_txt.Text 
    Dim mn As String = mn_txt.Text 
    Dim user As String = user_txt.Text 
    Dim pwd As String = pwd_txt.Text 
    Dim cpwd As String = cpwd_txt.Text 
    Dim email As String = email_txt.Text 
    Dim year As String = year_cbx.Text 
    Dim month As String = month_cbx.Text 
    Dim day As String = day_cbx.Text 
    Dim bdate As String = year + "-" + month + "-" + day 
    Dim jdate As String = Format(Date.Now, "yyyy-MM-dd") 
    Dim jtime As String = Format(Date.Now, "HH:mm:ss") 
    ins.insert(ln, fn, mn, user, email, bdate, jdate, jtime, pwd) 
End Sub 
End Class 

Все в порядке d он говорит на этикетке, что соединение прошло успешно, но когда я запускаю код он дает ошибку

Connection Error должен быть действительным и открытым

Я не понимаю, почему соединение называется замкнутым когда функция возвращает истину ...

Если люди задаются вопросом, почему отдельные его каждый классов это потому, что я пытаюсь кодировать чисто (я надеюсь, что и думать), и я хочу быть более гибкими в программировании

+0

Выполняется ли запрос в первый раз, или вы получаете ошибку сразу? Также это веб-приложение или настольное приложение? –

ответ

1

Проблема в том, что ваш класс «connect» не имеет отношения к вашей функции «вставить», что означает, что вы создаете новую соединение в каждом. Что вам нужно сделать, так это создать общее соединение с вашей базой данных, которое будет управлять вашим классом подключений, и ваша функция «вставить» будет использовать существующее соединение.

Нет ничего плохого в разделении кода на различные разделы, но вы должны знать, как это сделать эффективно. Обычно я поддерживаю управление подключением и выполнение запросов в тех же разделах, чтобы избежать обхода дополнительных объектов. Вот что я хотел бы сделать:

Imports MySql.Data 
Imports MySql.Data.MySqlClient 
Public Class QueryManager 

Dim dbCon As MySqlConnection 

Public Sub ManageConnection(ByVal CloseConnection As Boolean) 
    Try 
     'Prepare connection and query' 
     dbCon = New MySqlConnection("Server=localhost; User Id = root; Pwd = 12345; Database = digitallibrary") 
     If CloseConnection = False Then 
      If dbCon.State = ConnectionState.Closed Then _ 
       dbCon.Open() 
     Else 
      dbCon.Close() 
     End If 
    Catch ex As Exception 
     MsgBox("FAIL") 
    End Try 

End Sub 

Public Sub Insert(ByVal ln As String, ByVal fn As String, ByVal mn As String, ByVal user As String, ByVal email As String, ByVal bdate As String, ByVal jdate As String, ByVal jtime As String, ByVal pwd As String) 
    Try 
     ManageConnection(True) 'Open connection' 

     Dim strQuery As String = "INSERT INTO user_tbl(user_ln,user_fn,user_mn,username,user_email,user_bdate, user_jdate, user_jtime)" & _ 
      "VALUES('" + ln + "','" + fn + "','" + mn + "','" + user + "','" + email + "','" + bdate + "','" + jdate + "','" + jtime + "');" & _ 
      "INSERT INTO login_tbl(username,password)VALUES('" + user + "','" + pwd + "')" 

     Dim SqlCmd As New MySqlCommand(strQuery, dbCon) 
     SqlCmd.ExecuteNonQuery() 

     ManageConnection(False) 'Close connection' 

    Catch ex As Exception 
     MsgBox("Error " & ex.Message) 
    End Try 
End Sub 

End Class 

Вы также больше не требуется субсчета «registration_Load», так как соединение будет открыт только тогда, когда он используется. Если вы хотите создать одно общее соединение и сохранить его через все приложение, вы можете настроить функции, чтобы отразить ваши потребности.

+0

, хотя ваша фактическая программа не работала после того, как я попробовал и скопировал ее вставить (я, вероятно, сделал что-то не так), но я понимаю, что вы сказали, и получил его работу. Большое спасибо – user2274752

+0

мы можем использовать 'parameter' like' cmd.Parameters .AddWithValue ("@ user_ln", ln.Text) '?? –

Смежные вопросы