2016-06-14 75 views
-1

我的代码现在这一点,因为我忘记添加到我的数据库的连接后,我更新的表,仍然不起作用虽然获取Visual Basic数据

Private Sub cmdRegistar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdRegistar.Click 
    myConnToAccess = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source = 'D:\PAP\LoginForm\LoginForm\bin\debug\login.mdb'") 
    myConnToAccess.Open() 
    Try 
     Dim x As String 
     Dim str As String 
     x = ComboBox1.Text 
     str = "UPDATE UserTable set Password = '" & txtPass.Text & "' where Username = '" & x & "'" 
     Dim cmd As OleDbCommand = New OleDbCommand(str, myConnToAccess) 
     myConnToAccess.Close() 
    Catch ex As Exception 
     MsgBox(ex.Message) 
    End Try 
End Sub 

所以你可以看到代码没有任何错误,它编译和运行得很好,它只是不起作用,组合框值来自我正在尝试使用命令更新的同一个数据库。我所有其他的连接工作都很好,我的添加,搜索。

+2

粘贴你的代码作为文本在你的问题中,并将其包装在代码标签中。解释你想要做什么以及为什么你认为它不工作。你有错误信息吗?我的第一个猜测是,你试图运行一个查询,但你关闭你的连接,然后你对我的数据库进行访问(2010)中的SQL – dbmitch

+0

我试图替换来自文本框的数据库中的值。不,没有任何错误信息 –

+2

请重新提出您的问题以删除VBA标签。 –

回答

0

你什么时候实际将str传递给你的数据库?难道你不应该有像str.Execute之类的东西吗?除此之外,你还在这行有一个错误:

str = "UPDATE UserTable set Password" & txtPass.text & "where Username= '" & x & "'" 

它应该是:

str = "UPDATE UserTable set Password = '" & txtPass.text & "' where Username = '" & x & "'" 
+0

对不起,如果这是一个愚蠢的问题,但是在那里没有办法做一个参数化查询,让数据库引擎处理引用和参数瓦特?我觉得很奇怪,会像这样连接用户输入,就好像SQL注入从不存在一样。 [**必读XKCD **](https://xkcd.com/327/) –

+0

是的,这一行Dim cmd As OleDbCommand =新的OleDbCommand(str,myConnToAccess)[myConnToAccess =新的OleDbConnection]但仍然无效 –

+0

垫 - 可能,但我不太记得VB。在C#中你肯定会使用参数。 Joao - 除非我误解,否则该行似乎从您的帖子中遗失了? –

0

密码是一个保留字,那么试试这个:

str = "UPDATE UserTable set [Password] = '" & txtPass.Text & "' where Username = '" & x & "'"