VB.NET Выражение не-булева типа, указанное в контексте, где ожидается условие, около ')' - PullRequest
0 голосов
/ 24 июня 2011

Я занимаюсь разработкой VB.NET ASPX-файла и пытаюсь выполнить строковый запрос в VB.NET, но теперь я получаю сообщение об ошибке выше.Как я могу определить причину?Часть кода в этом файле ASPX приведена ниже.Строка ошибки: DSPageData = GlobalFunctions.GlobalF.GetSQLServerDataSet (SQL)

Но эта же функция работает для одной из моих других строк SQL, поэтому я думаю, что проблема где-то в этой строке SQL:

            arrType.Add("Product and Process")
            arrType.Add("Product")
            arrType.Add("Process")                          
            dType.DataSource = arrType
            dType.DataBind()

                arrPEType.Add("INC")
                arrPEType.Add("NC")
                arrPEType.Add("QC")
                peType.DataSource = arrPEType
                peType.DataBind()
...
        Select Case dType.SelectedValue
            Case "Product and Process": 
                TheType = "(SMARTSOLVE.V_QXP_ALL_EXCEPTION.QXP_BASE_EXCEPTION='PXP_PRODUCT_QXP' Or SMARTSOLVE.V_QXP_ALL_EXCEPTION.QXP_BASE_EXCEPTION)='PXP_PROCESS_QXP')"
            Case "Product": 
                TheType = "(SMARTSOLVE.V_QXP_ALL_EXCEPTION.QXP_BASE_EXCEPTION='PXP_PRODUCT_QXP')"
            Case "Process": 
                TheType = "(SMARTSOLVE.V_QXP_ALL_EXCEPTION.QXP_BASE_EXCEPTION='PXP_PROCESS_QXP')"
        End Select

            Select Case peType.SelectedValue
                Case "INC": 
                    PE_Type = "(substring(a.QXP_EXCEPTION_NO, charindex('-', a.QXP_EXCEPTION_NO)+1, 4)='INC')"
                Case "NC": 
                    PE_Type = "(substring(a.QXP_EXCEPTION_NO, charindex('-', a.QXP_EXCEPTION_NO)+1, 4)='NC')"
                Case "QC": 
                    PE_Type = "(substring(a.QXP_EXCEPTION_NO, charindex('-', a.QXP_EXCEPTION_NO)+1, 4)='QC')"
            End Select

            If dOrgUnit.SelectedValue = "All" then
                TheOrgUnit = "<> 'All'"
            Else
                TheOrgUnit = "='" & dOrgUnit.SelectedValue & "'"
            End If

            Dim SQL As String = "SELECT CASE SMARTSOLVE.V_QXP_ALL_EXCEPTION.QXP_BASE_EXCEPTION WHEN 'PXP_PROCESS_QXP' THEN SMARTSOLVE.V_QXP_ALL_EXCEPTION.QXP_SHORT_DESC ELSE EPF_FAILURE_MODE END AS QXP_SHORT_DESC, " & _
                                "Count(distinct SMARTSOLVE.V_QXP_ALL_EXCEPTION.QXP_EXCEPTION_NO) AS CountOfQXP_EXCEPTION_NO " & _
                                 "FROM SMARTSOLVE.V_QXP_ALL_EXCEPTION LEFT OUTER JOIN " & _
                                    "SMARTSOLVE.V_EPL_EXCEPTION_PART_LOT ON V_QXP_ALL_EXCEPTION.QXP_ID = V_EPL_EXCEPTION_PART_LOT.EPL_QXP_ID LEFT OUTER JOIN " & _
                                    "SMARTSOLVE.V_EPF_EXPN_PART_FMODE ON V_EPL_EXCEPTION_PART_LOT.EPL_EPA_ID = V_EPF_EXPN_PART_FMODE.EPF_EPA_ID " & _
                                    "LEFT OUTER JOIN SMARTSOLVE.V_PXP_PRODUCT_QXP ON SMARTSOLVE.V_QXP_ALL_EXCEPTION.QXP_ID = SMARTSOLVE.V_PXP_PRODUCT_QXP.QXP_ID " & _
                                          "LEFT OUTER JOIN SMARTSOLVE.V_PXP_PROCESS_QXP ON SMARTSOLVE.V_QXP_ALL_EXCEPTION.QXP_ID = SMARTSOLVE.V_PXP_PROCESS_QXP.QXP_ID " & _
   "WHERE SMARTSOLVE.V_QXP_ALL_EXCEPTION.QXP_OCCURENCE_DATE >= CONVERT(DATETIME, '" & FirstMonthDate & " 00:00:00', 102) " & _
   "And SMARTSOLVE.V_QXP_ALL_EXCEPTION.QXP_OCCURENCE_DATE <= CONVERT(DATETIME, '" & LastMonthDate & " 23:59:59', 102) AND " & _
   "SMARTSOLVE.V_QXP_ALL_EXCEPTION.QXP_XRS_DESCRIPTION<>'Cancel' AND " & _
   "SMARTSOLVE.V_QXP_ALL_EXCEPTION.QXP_ORU_NAME" & TheOrgUnit & _
   " and " & TheType & _
   "AND (CASE V_QXP_ALL_EXCEPTION.QXP_BASE_EXCEPTION WHEN 'PXP_PROCESS_QXP' THEN V_PXP_PROCESS_QXP.PXP_OPR_NAME ELSE V_PXP_PRODUCT_QXP.PXP_OPR_NAME END <> 'Non-Diagnostic' OR " & _
                                    "CASE V_QXP_ALL_EXCEPTION.QXP_BASE_EXCEPTION WHEN 'PXP_PROCESS_QXP' THEN V_PXP_PROCESS_QXP.PXP_OPR_NAME ELSE V_PXP_PRODUCT_QXP.PXP_OPR_NAME END IS NULL) " & _
                                 "GROUP BY CASE SMARTSOLVE.V_QXP_ALL_EXCEPTION.QXP_BASE_EXCEPTION WHEN 'PXP_PROCESS_QXP' THEN SMARTSOLVE.V_QXP_ALL_EXCEPTION.QXP_SHORT_DESC ELSE EPF_FAILURE_MODE END " & _
                                 "ORDER BY Count(distinct SMARTSOLVE.V_QXP_ALL_EXCEPTION.QXP_EXCEPTION_NO) DESC"

            Dim DSPageData as new System.Data.DataSet
            DSPageData = GlobalFunctions.GlobalF.GetSQLServerDataSet(SQL)

Ответы [ 2 ]

0 голосов
/ 24 июня 2011

У вас слишком много) здесь:

           Case "Product and Process"                 
TheType = "(SMARTSOLVE.V_QXP_ALL_EXCEPTION.QXP_BASE_EXCEPTION='PXP_PRODUCT_QXP' Or SMARTSOLVE.V_QXP_ALL_EXCEPTION.QXP_BASE_EXCEPTION)='PXP_PROCESS_QXP')"
0 голосов
/ 24 июня 2011

Похоже, " and " & TheType & _ в приведенном выше коде следует заменить на:
" and " & PE_Type & _.

Я действительно надеюсь, что это не означает, что вы работаете с отключенным Option Explicit.Для позора.

Но, пожалуйста, примите мои комментарии к SQL инъекций близко к сердцу.Есть люди, которые запускают программное обеспечение, которое случайным образом троллит веб-сайты в поисках уязвимых страниц, и даже если у вас нет простого текстового ввода, я мог бы создать запрос http, который бы отправлял все, что я хотел, через раскрывающийся список dOrgUnit.Включая что-то вроде: ='1';DROP Table SMARTSOLVE.V_QXP_ALL_EXCEPTION;--

...