2010-03-23 25 views
0

在運行(使用的OleDbCommand)select語句我收到以下錯誤。鍵入「雙師型」是無效的

我的查詢是

SELECT CME 
    FROM Personnel 
WHERE CME = '11349D' 

如果objOleDbCom.ExecuteScalar()> 0,則

當我執行上面的語句,我得到這個錯誤

從字符串轉換 「11349D」鍵入'Double'是無效的。

我場CME的數據類型爲文本

我的數據庫是Access 2007年

我試圖通過直接在數據庫中運行我的查詢,並運行良好。

請建議。

謝謝。

+0

?它不是Jet/ACE數據或任何其他數據源的首選數據訪問接口。 – 2010-03-23 21:54:19

回答

0

雙是一個數字(CME似乎是該類型的),而「11249D」是一個字符串。他們不能相提並論。

當您嘗試,會發生什麼:

SELECT CME 
    FROM Personnel 
WHERE CME = 11349 
+0

如果他的專欄文字不會幫助 – pdr 2010-03-23 07:16:11

+0

@pdr:他說他正在執行代碼,所以我認爲(但我可能是錯的),類型轉換錯誤來自數據庫,而不是編譯器。由於'11249D'是一個字符串,我認爲CME必須是雙倍的。但是,由於我不知道Access,我可能會出現錯誤的軌道? – lexu 2010-03-23 07:18:28

+0

@lexu:我理解它的方式,他說CME是Text,它在If上失敗。這是有道理的,因爲ExecuteScalar返回一個對象(字符串「11249D」),然後嘗試將它與一個數字(> 0)進行比較。這就是說,我甚至對它的編譯感到驚訝。 – pdr 2010-03-23 07:27:22

0

WHERE CME = '11349D'

應該

WHERE CME = 11349

否「

1

的ExecuteScalar只返回由sql返回的表中的第0行,第0行字段。我認爲你真正想要的是

SELECT COUNT(1) FROM Personnel WHERE CME = '11349D' 
+0

@pdr:這是正確的 – 2010-03-23 09:22:34

0

我只是試過其實我是在做錯誤的方式來檢查記錄的存在。

我通過運行objOleDbCom.ExecuteScalar(),然後在if語句這是

「如果objOleDbCom.ExecuteScalar()> 0,則」

我現在用的

匹配期待的記錄數你爲什麼要在Access中使用ADO/OLEDB
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 

問題解決

相關問題