2010-03-04 52 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]。

相關問題