未處理的例外狀況在 System.Data.dll 中發生。其他資訊:在應使用條件的上下文(在 '***' 附近)中指定了非布爾類型的運算式。,system.data.dll

來源:互聯網
上載者:User

未處理的例外狀況在 System.Data.dll 中發生。其他資訊:在應使用條件的上下文(在 '***' 附近)中指定了非布爾類型的運算式。,system.data.dll

           

         機房收費系統中,有些人在聯集查詢這個模組用的是預存程序,我先嘗試著在資料庫中建立了一個視圖,然後在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值之間是不可以有空格的(這時,My Code中的@strCondition就是一個Boolean類型的變數;但如果where後面是一條語句的話(當然這一條語句的整體也是一個Boolean類型的值,比如“1=1”),那麼這條語句和where之間就必須要有空格。

         

         


“SystemArgumentException”類型的未經處理的異出在 SystemDatadll 資訊: 列要有效 DataType

在操作資料庫相互關聯類型的時候 不應該使用.net中的類型吧 應該是有枚舉來擷取類型的
 
未處理的“SystemArgumentException”類型的異常出現在 SystemDatadll 中

System.Data.dll需要引用一下
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.