最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

未经处理的异常在System.Data.dll中发生。其他信息:在应使用条

来源:动视网 责编:小采 时间:2020-11-09 14:58:21
文档

未经处理的异常在System.Data.dll中发生。其他信息:在应使用条

未经处理的异常在System.Data.dll中发生。其他信息:在应使用条:机房收费系统中,有些人在联合查询这个模块用的是存储过程,我先尝试着在数据库中建立了一个视图,然后在UI层做个判断并生成查询条件strCondition。 在机房收费系统的联合查询模块中出现的问题:System.Data.SqlClient.SqlException类型的未经处
推荐度:
导读未经处理的异常在System.Data.dll中发生。其他信息:在应使用条:机房收费系统中,有些人在联合查询这个模块用的是存储过程,我先尝试着在数据库中建立了一个视图,然后在UI层做个判断并生成查询条件strCondition。 在机房收费系统的联合查询模块中出现的问题:System.Data.SqlClient.SqlException类型的未经处


机房收费系统中,有些人在联合查询这个模块用的是存储过程,我先尝试着在数据库中建立了一个视图,然后在UI层做个判断并生成查询条件strCondition。 在机房收费系统的联合查询模块中出现的问题:System.Data.SqlClient.SqlException类型的未经处理的异常在 S

机房收费系统中,有些人在联合查询这个模块用的是存储过程,我先尝试着在数据库中建立了一个视图,然后在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之间就必须要有空格。

文档

未经处理的异常在System.Data.dll中发生。其他信息:在应使用条

未经处理的异常在System.Data.dll中发生。其他信息:在应使用条:机房收费系统中,有些人在联合查询这个模块用的是存储过程,我先尝试着在数据库中建立了一个视图,然后在UI层做个判断并生成查询条件strCondition。 在机房收费系统的联合查询模块中出现的问题:System.Data.SqlClient.SqlException类型的未经处
推荐度:
标签: 信息 处理 发生
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top