我想實現一個文本框,即txtSearchInput
即能搜索會員ID(自動編號)以及會員名(短文本)來自MS Access數據庫的。VB.NET數據類型不匹配
如果我進入數到文本框基於會員ID搜索成員,我好去。但是,我收到此錯誤消息:Data type mismatch in criteria expression.
如果我試圖根據成員名稱搜索成員。
有沒有人可以向我解釋我應該如何編碼才能正確使用?此外,如果你們有鏈接,如果這個問題以前的答案或更好的概念,我會高度讚賞它。
我當前的代碼:
Try
'Setup Connection String
conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " & Application.StartupPath & "\igcDatabase.accdb"
sqlCom.Connection = conn
'Open Data Connection
conn.Open()
'Query
sqlCom.CommandText = "SELECT * FROM [Members] WHERE [Member ID] = @MemberID OR [Member First Name] = @FirstName"
'Parameter is used below to prevent SQL Injection
sqlCom.Parameters.AddWithValue("MemberID", txtSearchInput.Text)
sqlCom.Parameters.AddWithValue("FirstName", txtSearchInput.Text)
Dim sqlRead As OleDbDataReader = sqlCom.ExecuteReader()
sqlRead.Read()
If sqlRead.HasRows = True Then
Dim membershipType As String
If sqlRead.GetValue(4) = 1 Then
membershipType = "Deluxe"
ElseIf sqlRead.GetValue(4) = 2 Then
membershipType = "Non-Deluxe"
Else
membershipType = "Week-Day"
End If
txtMemberID.Text = sqlRead.GetValue(0)
txtFirstName.Text = sqlRead.GetString(1)
txtLastName.Text = sqlRead.GetString(2)
txtGender.Text = sqlRead.GetString(3)
txtContact.Text = sqlRead.GetValue(5)
txtEmail.Text = sqlRead.GetString(6)
txtMembershipType.Text = membershipType
txtStatus.Text = sqlRead.GetString(7)
Else
MessageBox.Show("There Is no such member found in database. Please Try again. ", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning)
txtSearchInput.Clear()
txtSearchInput.Focus()
End If
sqlCom.Parameters.Clear()
sqlRead.Close()
conn.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
如果'會員ID'是一個值,你逝去的文本是一個字符串;完整的錯誤信息會這樣說。您應該使用'Add'而不是'AddWithValue'並指定類型。它看起來像選項嚴格關閉 – Plutonix
@Plutonix感謝您的解決方案,它真的幫了我很多!而且,選項嚴格關閉。如果最好在默認情況下打開它? – Gideon
最好使它成爲所有項目的永久默認值:工具 - >選項 - >項目和解決方案 - > VB默認值。可能還需要爲當前項目打開它:項目屬性 - >編譯 – Plutonix