2010-03-04 3 views
6

Có gì sai ở đây, tôi luôn gặp phải một số lỗi khó chịu ngay cả khi cùng mã mà tôi đã sử dụng trước đó. Nhưng khi tôi áp dụng nó cho các hình thức khác nó mang lại cho tôi những lỗi ở trên. đây là mã của tôi:không có giá trị nào được cung cấp cho một hoặc nhiều thông số bắt buộc

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 

Và đây là đoạn code trong nút mà cố gắng để cập nhật dữ liệu:

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 

những gì có thể sai ở đây?

+1

Có vẻ như mã chín cho SQL injection cho tôi (mặc dù không phải DML vì Jet/ACE không thể thực hiện nhiều câu lệnh). Bạn thực sự nên sử dụng các thông số. –

+0

Tôi không bao giờ nghĩ rằng tiêm sql có thể tồn tại trong các ứng dụng của khách hàng được thực hiện thông qua vb.net. cảm ơn – user225269

+0

Với kết thúc máy bay phản lực, rủi ro thấp, vì rủi ro duy nhất là tiết lộ quá nhiều dữ liệu (do người dùng cố gắng khai thác mã của bạn đưa vào biểu thức sẽ đánh giá TRUE cho tất cả các hàng), nhưng đó có thể là vấn đề trong và của chính nó, đặc biệt là với một UPDATE, mà có thể kết thúc thay đổi dữ liệu trong tất cả các hàng thay vì chỉ trong tập con được mong muốn. –

Trả lời

11

Lý do thông thường cho lỗi này là giá trị thiếu hoặc sai chính tả. Dường như adminName là Null hoặc một chuỗi có độ dài bằng 0.

+0

Tôi nhận được nó xin lỗi vì sự cố đó chỉ là lỗi đánh máy đơn giản: AdminPassS = '"& adminPass phải là AdminPass..bất cứ cách nào để trả lời – user225269

22

Một thủ thuật tốt để đối phó với một lỗi no value given for one or more required parameters khi phát triển cho một truy cập trở lại cuối cùng là để lấy nội dung của CommandText và dán nó vào một truy vấn giả trong Access chính nó. Sau đó, Access sẽ cung cấp cho bạn một cửa sổ bật lên xác định trường nào đang gây ra sự cố (thường là lỗi đánh máy, như trong trường hợp của bạn).

+0

một cách hay, ở đây có rất nhiều mẹo hay có thể nhận được từ những con quái vật như bạn, cảm ơn :) – user225269

+0

Cảm ơn - phải đối phó với cơ sở dữ liệu cũ, tôi đã quên tất cả các thủ thuật Truy cập của mình! – Meg

1

Khi dán văn bản lệnh vào quyền truy cập và Access bật lên cho bạn biết trường nào là vấn đề, nếu có vẻ không phải là một loại, hãy thử kèm theo tên trường trong dấu ngoặc vuông. [] Có thể một trong các cột của bạn có thể chứa từ khóa. Điều này xảy ra với tôi, mà cột LL_ID - tôi đã phải thay đổi nó thành [LL_ID].