2015-11-09 113 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 

末級

我有在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() 

去除我。

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「語法錯誤」在INSERT命令

+0

謝謝你的回覆,看起來非常出色。我有一個isue一旦我已經導入你的代碼---在行上使用cmd = new OleDb.OleDbCommand(sql,connStr)connStr有錯誤值類型'字符串'不能轉換爲'OleDbConnection'。感謝您的幫助 – DaMrZ

+0

我的不好,應該是連接,現在修復 – Steve

+0

謝謝你的修復。關於插入,使用密碼可以添加加密嗎?或以某種方式隱藏它的文本? – DaMrZ