Преобразование из строки в тип 'Double' недопустимо - PullRequest
0 голосов
/ 23 марта 2010

Я получаю следующую ошибку при выполнении оператора select (используя OleDbCommand).

Мой запрос

SELECT CME 
  FROM Personnel 
 WHERE CME = '11349D'

Если objOleDbCom.ExecuteScalar ()> 0, то

Когда я выполняю вышеприведенное утверждение, я получаю эту ошибку

Недопустимое преобразование из строки «11349D» в тип «Double».

Тип данных CME моего поля: Текст

Моя база данных Access 2007

Я попытался выполнить запрос непосредственно внутри базы данных, и он работает нормально.

Пожалуйста, предложите.

Спасибо.

Ответы [ 4 ]

1 голос
/ 23 марта 2010

ExecuteScalar просто возвращает столбец 0, поле строки 0 в таблице, возвращаемой вашим sql.Я думаю, что вы действительно хотите, это

SELECT COUNT(1) FROM Personnel WHERE CME = '11349D'
0 голосов
/ 23 марта 2010

Я только что попробовал, на самом деле я делал неправильный способ проверить существование записи.

Я ожидал подсчета записей, запустив objOleDbCom.ExecuteScalar () и затем сопоставив его в операторе if, который был

"Если objOleDbCom.ExecuteScalar ()> 0 Тогда"

, сейчас я использую

Dim _strSelectCME As String = "SELECT CME FROM Personnel WHERE CME = '"
Public Function IsPersonnelExits(ByVal p_strCME As String) As Boolean
Dim objOleDbCom As 
    New OleDbCommand(_strSelectCME & p_strCME & "'"
                     , DBRelated.GetDBConnection()
                    )

Dim objObject As Object = objOleDbCom.ExecuteScalar()
If Not IsNothing(objObject) Then
  Return True    
  Exit Function    
End If
Return False
End Function

Проблема решена

0 голосов
/ 23 марта 2010

ГДЕ CME = '11349D'

должно быть

ГДЕ CME = 11349

Нет '

0 голосов
/ 23 марта 2010

Двойной номер - это число (похоже, что это CME), а '11249D' - строка.Их нельзя сравнивать.

Что происходит при попытке:

SELECT CME 
  FROM Personnel 
 WHERE CME = 11349
...