2015-11-09 4 views
-1

У меня возникла проблема, когда я настраиваю эту регистрационную форму. Мой текущий код заключается в следующем:Проблемы с регистрационной формой VB.Net

Public Class Form2 
Dim con As New OleDb.OleDbConnection 

Dim dbProvider As String 
Dim dbSource As String 
Dim MyDocumentsFolder As String 
Dim TheDatabase As String 
Dim FullDatabasePath As String 
Dim ds As New DataSet 
Dim da As OleDb.OleDbDataAdapter 
Dim sql As String 
Dim DBTest1 As String 
Dim DBTestP1 As String 
Dim cmd As New OleDbCommand(sql, con) 
Dim connStr As String 

Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Dim connection As New OleDb.OleDbConnection(connStr) 
    dbProvider = "Provider=Microsoft.ACE.OLEDB.12.0;" 

    TheDatabase = "\Robocopy_Test.accdb" 
    MyDocumentsFolder = "C:\Users\Dan\Desktop\WindowsApplication2" 
    FullDatabasePath = MyDocumentsFolder & TheDatabase 

    dbSource = "Data Source = C:\Users\Dan\Desktop\WindowsApplication2\Robocopy_Testaccdb1.accdb" 

    con.ConnectionString = dbProvider & dbSource 

    con.Open() 
    sql = "SELECT * FROM Robocopy" 
    da = New OleDb.OleDbDataAdapter(sql, con) 
    'da.Fill(ds, "Robocopy") 
    MessageBox.Show("Databse is Open") 
    DBTest1 = DBTest.Text 
    DBTestP1 = DBTestP.Text 
    'DBTest.Text = ds.Tables("Robocopy").Rows(0).Item(1) 
    'DBTestP.Text = ds.Tables("Robocopy").Rows(0).Item(2 
    sql = "INSERT INTO Robocopy(username,password) VALUES('" & DBTest1 & "','" & DBTestP1 & "')" 
    cmd.Connection = connection 
    connection.Open() 
    cmd.CommandText = sql 
    da.InsertCommand = cmd 
    da.InsertCommand.ExecuteNonQuery() 
    connection.Close() 
    'With cmd.Parameters 
    '.AddWithValue("usernamer", DBTest.Text) 
    '.AddWithValue("password", DBTestP.Text) 
    '.AddWithValue("email", txtsub.text) 
    '.AddWithValue("contactnum", txtau.text) 
    'End With 
    'cmd.ExecuteNonQuery() 
End Sub 

Public Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 
    con.Close() 
    MessageBox.Show("Database Is now Closed") 
End Sub 

End Class

Я имею вопрос на connection.open(). Ошибка, которую я получаю, это Свойство ConnectionString не было инициализировано. Я пробовал в течение последнего часа, чтобы найти разные способы записи в базу данных, но ни в коем случае не преобладаю, и я не могу понять это.

[В ответ на Стив Моего кода после редактирования и еще одной и тех же ошибок

Imports System.Data.OleDb 

Public Class Form2 
Dim connection As New OleDb.OleDbConnection 

Dim dbProvider As String 
Dim dbSource As String 
Dim MyDocumentsFolder As String 
Dim TheDatabase As String 
Dim FullDatabasePath As String 
Dim ds As New DataSet 
Dim da As OleDb.OleDbDataAdapter 
Dim sql As String 
Dim DBTest1 As String 
Dim DBTestP1 As String 
Dim cmd As New OleDbCommand(sql, connection) 
Dim connStr As String 

Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Dim connection As New OleDb.OleDbConnection(connStr) 
    dbProvider = "Provider=Microsoft.ACE.OLEDB.12.0;" 

    TheDatabase = "\Robocopy_Test.accdb" 
    MyDocumentsFolder = "C:\Users\Dan\Desktop\WindowsApplication2" 
    FullDatabasePath = MyDocumentsFolder & TheDatabase 

    dbSource = "Data Source = C:\Users\Dan\Desktop\WindowsApplication2\Robocopy_Testaccdb1.accdb" 

    Me.connection.ConnectionString = dbProvider & dbSource 

    Me.connection.Open() 
    sql = "SELECT * FROM Robocopy" 
    da = New OleDb.OleDbDataAdapter(sql, connection) 
    'da.Fill(ds, "Robocopy") 
    MessageBox.Show("Databse is Open") 
    DBTest1 = DBTest.Text 
    DBTestP1 = DBTestP.Text 
    'DBTest.Text = ds.Tables("Robocopy").Rows(0).Item(1) 
    'DBTestP.Text = ds.Tables("Robocopy").Rows(0).Item(2 
    sql = "INSERT INTO Robocopy(username,password) VALUES('" & DBTest1 & "','" & DBTestP1 & "')" 
    cmd.Connection = connection 
    connection.Open() 
    cmd.CommandText = sql 
    da.InsertCommand = cmd 
    da.InsertCommand.ExecuteNonQuery() 
    connection.Close() 
    'With cmd.Parameters 
    '.AddWithValue("usernamer", DBTest.Text) 
    '.AddWithValue("password", DBTestP.Text) 
    '.AddWithValue("email", txtsub.text) 
    '.AddWithValue("contactnum", txtau.text) 
    'End With 
    'cmd.ExecuteNonQuery() 
End Sub 

Public Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 
    connection.Close() 
    MessageBox.Show("Database Is now Closed") 
End Sub 
End Class 
+1

HTTP: // WWW .connectionstrings.com/ – Plutonix

+0

Зачем настраивать адаптер с переменной con, а затем устанавливать другое соединение в команде, используемой в качестве команды вставки адаптера? Не могли бы вы попытаться воссоздать адаптер с правильным соединением перед выполнением вставки? – Steve

+0

В какой момент это происходит? Какая линия? – Neolisk

ответ

1

Глобальных переменных может быть очень .... злом. Особенно, если вы назовете их с тем же именем локальной переменной.

Me.connection не является той же переменной connection, объявленной как локальная переменная внутри под. Вы можете установить строку соединения по глобальной переменной затем использовать локальную переменную без строки соединения

Изменить эти две линии

Me.connection.ConnectionString = dbProvider & dbSource 
Me.connection.Open() 

удаления Me.

connection.ConnectionString = dbProvider & dbSource 
connection.Open() 

и не открывайте соединение два раза.

В любом случае, вам не нужен адаптер вообще выполнить команду Insert

Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    dbProvider = "Provider=Microsoft.ACE.OLEDB.12.0;" 
    dbSource = "Data Source = C:\Users\Dan\Desktop\WindowsApplication2\Robocopy_Testaccdb1.accdb" 
    Dim connStr = dbProvider & dbSource  

    DBTest1 = DBTest.Text 
    DBTestP1 = DBTestP.Text 
    sql = "INSERT INTO Robocopy(username,[password]) VALUES('" & DBTest1 & "','" & DBTestP1 & "')" 

    Using connection = New OleDb.OleDbConnection(connStr) 
    Using cmd = new OleDb.OleDbCommand(sql, connection)  
     connection.Open() 
     cmd.ExecuteNonQuery() 

     'With cmd.Parameters 
      '.AddWithValue("usernamer", DBTest.Text) 
      '.AddWithValue("password", DBTestP.Text) 
      '.AddWithValue("email", txtsub.text) 
      '.AddWithValue("contactnum", txtau.text) 
     'End With 
     'cmd.ExecuteNonQuery() 
    End Using 
    End Using 
End Sub 

Я вижу также, что вы закомментировал параметризованный подход к вашему запросу. Пожалуйста, сделайте себе одолжение и восстановите как можно скорее логику параметров. Это намного более безопасно и позволяет избежать многочисленных ошибок

Наконец Пароль является зарезервированным ключевым словом в Access.Use квадратных brakets вокруг него иначе вы увидите unexplicable «Синтаксическая ошибка» в вашей команде вставки

+0

Благодарим вас за ответ, который до сих пор выглядит блестящим. У меня есть isue, как только я импортировал ваш код --- В строке Использование cmd = new OleDb.OleDbCommand (sql, connStr) connStr имеет ошибку Значение типа 'String' не может быть преобразовано в 'OleDbConnection'. Спасибо за вашу помощь заблаговременно – DaMrZ

+0

Неплохо, должно быть подключение, исправлено сейчас – Steve

+0

Благодарим за исправление. Что касается вставки, с паролем можно добавить шифрование? или скрыть свой текст? – DaMrZ

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