2023年6月21日发(作者:)

未经处理的异常在中发⽣。其它信息:在应使⽤条件的上下⽂(在#。。。

机房收费系统中,有些⼈在联合查询这个模块⽤的是存储过程,我先尝试着在数据库中建⽴了⼀个视图,然后在UI层做个推断并⽣成查询条件strCondition。 在机房收费系统的“联合查询”模块中出现的问题:“eption”类型的未经处理的异常在 中发⽣。其它信息: 在应使⽤条件的上下⽂(在 '@strCondition' 附近)中指定了⾮布尔类型的表达式。 出错的DAL层代码为:

Public Function QueryOnLineStatus(ByVal strCondition As String) As List(Of nLineStatusViewEntity) Implements nLineStatus Dim cmdText As String = "select * from QueryOnLineStatus_View where @strCondition" '定义查询字符串(strCondition为UI层传过来的查询条件) Dim cmdType As CommandType = '定义命令类型 Dim sqlHelper As New SqlHelper '实例化SqlHelper类 Dim myList As List(Of nLineStatusViewEntity) Dim dtb As New DataTable Dim parameters As SqlParameter() parameters = {New SqlParameter("@strCondition", strCondition)} dtb = eSelect(cmdText, cmdType, parameters) myList = tToList(Of nLineStatusViewEntity)(dtb) 'tToList的功能是把DataTable类型转化为泛型集合 Return myList End Function

代码⾥SQL语句中的strCondition是从UI层传过来的查询条件,此发⽣错误时。在调试中已经证明查询条件没有错误,例如以下图:strCondition的值为:“cardNumber='1' ”,所以整个SQL语句不就是“ select * from QueryOnLineStatus_Viewwhere cardNumber='1' ”嘛! 最后解决问题的办法太出乎我的意料:把原SQL语句"select * from QueryOnLineStatus_View where@strCondition"中“where”和"@strCondition"之间的空格给去掉,将SQL语句变成"select * from QueryOnLineStatus_Viewwhere@strCondition"。 经过⼀阵冥思苦想,在数据库中尝试了好多次后,才明确这究竟是为什么。。。。 先看在数据库中測试的结果: 1、当查询语句中where后⾯是⼀个值时(如果这个值是1): (1)、查询语句中where与1之间没有空格,查询出正确结果;

(2)、查询语句中where与1之间有空格,报错:在应使⽤条件的上下⽂(在 '1' 附近)中指定了⾮布尔类型的表达式。

2、如果查询语句中where后⾯是⼀条语句时(如果这条语句是“1=1”): (1)查询语句中where与“1=1”之间有空格。查询出正确结果。

(2)查询语句中where与“1=1”之间没有空格,报错:'=' 附近有语法错误。

原来。SQL语句中。where后⾯跟的是⼀个Boolean型的值。 【画龙点睛】 在where后⾯,假设不过⼀个Boolean类型的值或者Boolean类型的变量,那么where和这个Boolean值之间是不能够有空格的(这时。我的代码中的@strCondition就是⼀个Boolean类型的变量;但假设where后⾯是⼀条语句的话(当然这⼀条语句的总体也是⼀个Boolean类型的值。⽐⽅“1=1”),那么这条语句和where之间就必需要有空格。

2023年6月21日发(作者:)

未经处理的异常在中发⽣。其它信息:在应使⽤条件的上下⽂(在#。。。

机房收费系统中,有些⼈在联合查询这个模块⽤的是存储过程,我先尝试着在数据库中建⽴了⼀个视图,然后在UI层做个推断并⽣成查询条件strCondition。 在机房收费系统的“联合查询”模块中出现的问题:“eption”类型的未经处理的异常在 中发⽣。其它信息: 在应使⽤条件的上下⽂(在 '@strCondition' 附近)中指定了⾮布尔类型的表达式。 出错的DAL层代码为:

Public Function QueryOnLineStatus(ByVal strCondition As String) As List(Of nLineStatusViewEntity) Implements nLineStatus Dim cmdText As String = "select * from QueryOnLineStatus_View where @strCondition" '定义查询字符串(strCondition为UI层传过来的查询条件) Dim cmdType As CommandType = '定义命令类型 Dim sqlHelper As New SqlHelper '实例化SqlHelper类 Dim myList As List(Of nLineStatusViewEntity) Dim dtb As New DataTable Dim parameters As SqlParameter() parameters = {New SqlParameter("@strCondition", strCondition)} dtb = eSelect(cmdText, cmdType, parameters) myList = tToList(Of nLineStatusViewEntity)(dtb) 'tToList的功能是把DataTable类型转化为泛型集合 Return myList End Function

代码⾥SQL语句中的strCondition是从UI层传过来的查询条件,此发⽣错误时。在调试中已经证明查询条件没有错误,例如以下图:strCondition的值为:“cardNumber='1' ”,所以整个SQL语句不就是“ select * from QueryOnLineStatus_Viewwhere cardNumber='1' ”嘛! 最后解决问题的办法太出乎我的意料:把原SQL语句"select * from QueryOnLineStatus_View where@strCondition"中“where”和"@strCondition"之间的空格给去掉,将SQL语句变成"select * from QueryOnLineStatus_Viewwhere@strCondition"。 经过⼀阵冥思苦想,在数据库中尝试了好多次后,才明确这究竟是为什么。。。。 先看在数据库中測试的结果: 1、当查询语句中where后⾯是⼀个值时(如果这个值是1): (1)、查询语句中where与1之间没有空格,查询出正确结果;

(2)、查询语句中where与1之间有空格,报错:在应使⽤条件的上下⽂(在 '1' 附近)中指定了⾮布尔类型的表达式。

2、如果查询语句中where后⾯是⼀条语句时(如果这条语句是“1=1”): (1)查询语句中where与“1=1”之间有空格。查询出正确结果。

(2)查询语句中where与“1=1”之间没有空格,报错:'=' 附近有语法错误。

原来。SQL语句中。where后⾯跟的是⼀个Boolean型的值。 【画龙点睛】 在where后⾯,假设不过⼀个Boolean类型的值或者Boolean类型的变量,那么where和这个Boolean值之间是不能够有空格的(这时。我的代码中的@strCondition就是⼀个Boolean类型的变量;但假设where后⾯是⼀条语句的话(当然这⼀条语句的总体也是⼀个Boolean类型的值。⽐⽅“1=1”),那么这条语句和where之间就必需要有空格。