2010-03-04 54 views
6

给定值什么是错在这里,我总是得到一些讨厌的错误,即使我以前使用的相同的代码工作。但是当我将它应用于其他形式时,它会给我上面的错误。 这里是我的代码:没有一个或多个必需参数

Imports System.Data.OleDb 
Public Class Updater2 
    Public adminID As String 
    Public adminName As String 
    Public adminPass As String 

    Private con As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db1.mdb;Jet OLEDB:Database Password=nrew123$%^;") 
    Private com As OleDb.OleDbCommand 

    Public Sub New() 
     con.Open() 
     com = New OleDb.OleDbCommand("Select * from admintable") 
     com.Connection = con 



    End Sub 

    Public Sub updates() 
     com.CommandText = "UPDATE admintable SET AdminName = '" & adminName & "', AdminPassS = '" & adminPass & "' WHERE ID = '" & adminID & "'" 
     com.ExecuteNonQuery() 

    End Sub 
End Class 

下面是在按钮的代码,试图更新数据:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     shikai.adminID = textbox1.text 
     shikai.adminName = TextBox4.Text 
     shikai.adminPass = TextBox3.Text 






     shikai.updates() 
     MsgBox("Successfully updated!") 
    End Sub 

什么可能是错在这里?

+1

看起来像SQL注入成熟的代码(虽然不是DML,因为Jet/ACE不能执行多个语句)。你真的应该使用参数。 – 2010-03-04 19:26:30

+0

我从来没有想过sql注入可能存在于通过vb.net创建的客户端应用程序中。谢谢 – user225269 2010-03-05 00:37:23

+0

对于Jet后端,风险很低,因为唯一的风险是揭示了太多的数据(用户试图利用代码放入一个表达式,所有行都将评估为TRUE),但这可能是问题,特别是对于UPDATE,这可能最终会改变所有行中的数据,而不仅仅是所需的子集。 – 2010-03-05 20:54:37

回答

11

通常的原因这个错误是缺失或拼写错误值。看起来可能是adminName是空值或零长度字符串。

+0

我很抱歉,它只是一个简单的错字错误: AdminPassS ='“&adminPass必须是AdminPass ..但任何方式感谢您回答 – user225269 2010-03-04 11:23:27

22

一个好的技巧来处理用于访问后端开发时no value given for one or more required parameters错误就是抓住CommandText的内容并将其粘贴到访问本身就是一个伪查询。然后,Access将为您提供一个弹出窗口,用于识别哪个字段导致问题(通常是错字,就像您的情况一样)。

+0

不错的一个,这里真的很不错,有很多很好的技巧我可以从像你这样的怪物中获得,谢谢:) – user225269 2010-03-04 11:31:18

+0

感谢 - 不得不处理遗留数据库,我忘记了所有我的Access技巧! – Meg 2013-11-25 14:22:51

1

将命令文本粘贴到存取本身时,Access弹出告诉您哪个字段是问题,如果看起来不是某种类型,请尝试将字段名称括在方括号中。 []您的某个列可能包含关键字。这发生在我身上,LL_ID列 - 我必须将其更改为[LL_ID]。

相关问题