GeeJay Luna Ответов: 4

Несоответствие типов данных в выражении критериев. MS Access VB


' OK button
   Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
       Dim con As New OleDbConnection("Provider=Microsoft.jet.oledb.4.0;data source=C:\Users\Jill\Desktop\saddbase\Sadsystem\Sadsystem\bin\Debug\tenant.mdb")
       Dim cmd As OleDbCommand = New OleDbCommand("SELECT * FROM info WHERE TN_ID = '" & UsernameTextBox.Text & "' AND Password = '" & PasswordTextBox.Text & "' ", con)
       con.Open()
       Dim sdr As OleDbDataReader = cmd.ExecuteReader()
       ' If the record can be queried, Pass verification and open another form.
       If (sdr.Read() = True) Then
           MessageBox.Show("The user is valid!")

           Me.Hide()
       Else
           MessageBox.Show("Invalid Tenant ID or password!")
       End If


Когда я запускаю программу, в cmd появляется ошибка.Метода executereader(). *Несоответствие типов данных в выражении критериев* пожалуйста, помогите исправить эту ошибку.

4 Ответов

Рейтинг:
2

Ron Beyer

Я предполагаю, что ваш столбец username на самом деле не называется TN_ID, но что-то ближе к Username. Столбец TN_ID, вероятно, является вашим первичным ключом, и вы пытаетесь использовать равенство для сравнения его с текстовым значением, которое является несоответствием типов данных.


Рейтинг:
2

Govindaraj Rangaraj

TN_ID может быть числовым полем (возможно, полем ID, как предположил Рон). Проверьте его тип данных в базе данных. Если это числовое поле, то ошибка имеет смысл, так как вы передаете в него строковое значение "UsernameTextBox.Text".

Если TN_ID - это поле имени пользователя, то
"Целое число.Parse(UsernameTextBox.Text)" будет делать, если имя пользователя-это комбинация цифр, а также изменить его userid, чтобы сделать больше смысла.

иначе, если TN_ID не является полем имени пользователя, то
измените TN_ID на имя правого поля (имейте в виду преобразование типа данных).

в противном случае, если TN_ID должен содержать имя пользователя, которое в свою очередь содержит алфавиты, преобразуйте поле TN_ID в varchar (если оно числовое).


Рейтинг:
0

basurajkumbhar

что такое тип данных tn_id и пароль, я не знаю
пожалуйста, проверьте типы данных
Если TN_ID-целое число, а пароль-строка, то попробуйте
("SELECT * FROM info WHERE TN_ID =" & UsernameTextBox.Текст & " и пароль = '" & PasswordTextBox.Текст & "' ", con)

если TN_ID - это строка, а пароль-строка, то попробуйте сделать следующее
("SELECT * FROM info WHERE TN_ID = '" & UsernameTextBox.Текст & "' и пароль = '" & PasswordTextBox.Текст & "' ", con)


Рейтинг:
0

Member 10474579

в Access DB, когда мы используем select Query, мы должны использовать TN_ID = " & UsernameTextBox.Текст & " вместо TN_ID = '" & UsernameTextBox.Text & "' для типа данных number.
Потому что "& any-value & "используется для строкового значения, а" & any-value & " - для целочисленного или числового значения из базы данных. (') используется для данных Sting. для числа мы должны удалить его следующим образом " & any-value & "


Russell.BD

Спасибо за ясное объяснение. Это работает на меня!

Member 10295316

Спасибо за объяснение. Я столкнулся с той же проблемой но ваше решение работает на меня