博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
未经处理的异常在 System.Data.dll 中发生。其它信息:在应使用条件的上下文(在 '***' 附近)中指定了非布尔类型的表达式。...
阅读量:6956 次
发布时间:2019-06-27

本文共 2066 字,大约阅读时间需要 6 分钟。

           

         机房收费系统中,有些人在联合查询这个模块用的是存储过程,我先尝试着在数据库中建立了一个视图,然后在UI层做个推断并生成查询条件strCondition。

         在机房收费系统的“联合查询”模块中出现的问题:“System.Data.SqlClient.SqlException”类型的未经处理的异常在 System.Data.dll 中发生。其它信息: 在应使用条件的上下文(在 '@strCondition' 附近)中指定了非布尔类型的表达式。

         出错的DAL层代码为:

         

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

 

        代码里SQL语句中的strCondition是从UI层传过来的查询条件,此发生错误时。在调试中已经证明查询条件没有错误,例如以下图:strCondition的值为:“cardNumber='1' ”,所以整个SQL语句不就是“ select * from QueryOnLineStatus_View where cardNumber='1' ”嘛!

         最后解决问题的办法太出乎我的意料:把原SQL语句"select * from QueryOnLineStatus_View where @strCondition"中“where”和"@strCondition"之间的空格给去掉,将SQL语句变成"select * from QueryOnLineStatus_View where@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之间就必需要有空格。

         

         

你可能感兴趣的文章
Makefile-2
查看>>
获取页面中出现次数最多的三个标签以及出现次数
查看>>
访问WEB-INF目录中的文件
查看>>
web接口开发与测试
查看>>
php -- php控制linux关机、重启、注销
查看>>
十.python面向对象(itme)
查看>>
Python下selenium的简单用法
查看>>
multiset的应用
查看>>
我的mysql的学习记录
查看>>
Codeforces Round #416 (Div. 2)(A,思维题,暴力,B,思维题,暴力)
查看>>
NYOJ 题目77 开灯问题(简单模拟)
查看>>
模式识别
查看>>
设置文本编辑器的按回车时触发的事件
查看>>
关于android手机不能打印Log日志
查看>>
hdu 2157 How many ways?? **
查看>>
xcode8 更新cocoapods
查看>>
习题:海盗船(广搜)
查看>>
auto_ptr
查看>>
Windows系统的消息机制
查看>>
谈谈java中静态变量与静态方法在有继承关系的两个类中调用
查看>>