2010-03-23 27 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 

问题解决

相关问题