Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.Net中的注册表问题_Vb.net - Fatal编程技术网

VB.Net中的注册表问题

VB.Net中的注册表问题,vb.net,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

我在设置此注册表时遇到问题。 我目前的代码是:

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

全局变量可能非常…邪恶。特别是如果你用与局部变量相同的名称命名它们

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中的保留关键字。请在其周围使用方形括号,否则您将看到无法解释的“语法错误”在insert命令中

为什么要使用con变量设置适配器,然后在用作适配器insert命令的命令中设置不同的连接?在执行insert命令之前,能否尝试使用正确的连接重新创建适配器?在哪一点失败?哪一行?@Neolisk连接。open()cmd.connection=connection后面的行---我目前正在编辑我认为是steve的代码means@Steve我已经按照我认为你的意思编辑了代码,尽管我仍然收到相同的错误。谢谢你的回复。到目前为止,它看起来非常棒。一旦我导入了你的代码,我就会有一个isue——在线使用cmd=new OleDb.OleDbCommand(sql、connStr)connStr的错误值类型为“字符串”,无法转换为“OleDbConnection”。感谢您的帮助。我的情况很糟糕,它应该是连接,现在已修复。感谢您的修复。关于插入,使用密码是否可以添加加密?或以某种方式隐藏其文本?连接字符串信息应存储在app.c中onfig文件和管理此文件的类都有加密方法(抱歉,仍然是C#,但我希望您了解如何搜索),同时为了保护存储在数据库中的用户密码,您应该搜索散列密码
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