@ #39;/'应用程序.不正确的语法

本文关键字:语法 不正确 应用程序 | 更新日期: 2023-09-27 18:09:55

正在为别人在Webmatrix中构建的网站添加内容。当我更改SQL查询时,它抛出语法错误,即使它以前工作得很好。这个错误让我头痛不已。

我所做的就是将:WHERE ub_acct.afac_status ='A'添加到SQL查询的末尾

'/'应用程序出现服务器错误。

"afac_acct_no"附近语法错误。

描述:在执行过程中发生未处理的异常当前的web请求。请查看堆栈跟踪了解更多信息有关错误及其在代码中的起源的信息。

异常详细信息:System.Data.SqlClient.SqlException: Incorrect'afac_acct_no'附近的语法。

源错误:

foreach (var行)查询(selectQueryString, pnumb, accountNo,serviceAddr, address1, address2, drvID, rgtrID, trnsmtrID))

代码是:

    @{
    string selectQueryString = "";
    var db = Database.Open("derpdatabase");
    var output = "";
    bool search = false;
    string pnumb = "";
    string accountNo = "";
    string serviceAddr = "";
    string address1 = "";
    string address2 = "";
    string drvID = "";
    string rgtrID = "";
    string trnsmtrID = "";
    int pnumbNo = 0;
    int accountNoNo = 0;
    int drvid = 0;
    int rgtrid = 0;
    int trnsmtrid = 0;
    if(IsPost)
    {
        pnumb = Request.Form["pnumb"].Trim();
        accountNo = Request.Form["accountNo"].Trim();
        serviceAddr = Request.Form["serviceAddr"].Trim();
        address1 = Request.Form["address1"].Trim();
        address2 = Request.Form["address2"].Trim();
        drvID = Request.Form["drvID"].Trim();

        if (pnumb.IsInt())
        {
            pnumbNo = int.Parse(pnumb);
        }
        if (accountNo.IsInt())
        {
            accountNoNo = int.Parse(accountNo);
        }

         if (drvID.IsInt())
         {
             drvid = int.Parse(drvID);
         }
         if (rgtrID.IsInt())
          {
             rgtrid = int.Parse(rgtrID);
          }
          if (trnsmtrID.IsInt())
           {
             trnsmtrid = int.Parse(trnsmtrID);
           }

        if ( pnumbNo != 0 || accountNoNo != 0 || serviceAddr != "" || address1 != "" || address2 != "" || drvid !=0 || rgtrid !=0 || trnsmtrid !=0)
        {
            selectQueryString = "SELECT afac_pnumb, afac_acct_no, afac_service_addr, afac_addr1, afac_addr2, afmr_driver_id, afmr_touchread_register, afmr_mxu FROM ub_acct JOIN ub_driver_trans ON ub_acct.afac_pnumb = ub_driver_trans.afm_trans_pnumb JOIN ub_driver_register ON ub_driver_trans.afm_driver_id = ub_driver_register.afmr_driver_id WHERE ub_acct.afac_status ='A'";
            search = true;
        }

        if (pnumbNo != 0)
        {
            selectQueryString += "afac_pnumb = @0 AND ";
        }
        if (accountNoNo != 0)
        {
            selectQueryString += "afac_acct_no = @1 AND ";
        }

        if (!String.IsNullOrWhiteSpace(serviceAddr))
        {
            selectQueryString += "afac_service_addr LIKE '%' + CAST(@2 AS nvarchar) + '%' AND ";
        }
        if (!String.IsNullOrWhiteSpace(address1))
        {
            selectQueryString += "afac_addr1 LIKE '%' + CAST(@3 AS nvarchar) + '%' AND ";
        }
        if (!String.IsNullOrWhiteSpace(address2))
        {
            selectQueryString += "afac_addr2 LIKE '%' + CAST(@4 AS nvarchar) + '%' AND ";
        }
        if (drvid != 0)
        {
            selectQueryString += "afmr_driver_id = @5 AND ";
        }  
         if ( rgtrid != 0)
         {
            selectQueryString += "afmr_touchread_regidter = @6 AND ";
         }
         if (trnsmtrid != 0)
          {
            selectQueryString += "afm_mxu = @7 AND ";
          }

        if (selectQueryString.EndsWith(" AND "))
        {
            selectQueryString = selectQueryString.Remove(selectQueryString.Length - 5);
        }
    }
}
<div id="topBar"></div>
<div id="title" class="centerInline centerBlock heavyNarrowFont brownText fillWidth">CIC Search</div><br /><br />
<div id="searchBody" class="centerBlock centerInline fillWidth">
    <form id="searchForm" class="centerInline centerBlock fillWidth" method="post" action="">
        <table id="searchTable" class="centerInline centerBlock fillWidth">
            <tr>
                <td class="left">pnumb:</td>
                <td class="right"><input id="pnumb" name="pnumb" type="text" maxlength="4" /></td>
            </tr>
            <tr>
                <td class="left">Account #:</td>
                <td class="right"><input id="accountNo" name="accountNo" type="text" maxlength="5" /></td>
            </tr>
            <tr>
                <td class="left">Service Address:</td>
                <td class="right"><input id="serviceAddr" name="serviceAddr" type="text" maxlength="75" /></td>
            </tr>
            <tr>
                <td class="left">Address 1:</td>
                <td class="right"><input id="address1" name="address1" type="text" maxlength="75" /></td>
            </tr>
            <tr>
                <td class="left">Address 2:</td>
                <td class="right"><input id="address2" name="address2" type="text" maxlength="75" /></td>
            </tr>
            <tr>
                 <td class="left"><span class="drvID">Driver ID:</span></td>
                 <td class="right"><input id="drvID" name="drvID" type="text" maxlength="16" /></td>
                </tr>
                <tr>

                 <td id="searchBtnCell" class="centerInline" colspan="2">
                    <br />
                    <br />
                    <input type="submit" value="Search" class="button centerBlock" />
                </td>
            </tr>
        </table>
    </form><br />
    <div id="resultContainer">

        @if (IsPost && search == true)
        {
            <hr /><br />

            foreach (var row in db.Query(selectQueryString, pnumb, accountNo, serviceAddr, address1, address2, drvID, rgtrID, trnsmtrID))
            {
                <div class="result fillWidth grayGradient">
                    <span class="resultLabel">pnumb #:&nbsp;</span><span class="resultValue"> @row.afac_pnumb</span><br />
                    <span class="resultLabel">Account #:&nbsp;</span><span class="resultValue"> @row.afac_acct_no</span><br />
                    <span class="resultLabel">Service Address:&nbsp;</span><span class="resultValue"> @row.afac_service_addr</span><br />
                    <span class="resultLabel">Address 1:&nbsp;</span><span class="resultValue"> @row.afac_addr1</span><br />
                    <span class="resultLabel">Address 2:&nbsp;</span><span class="resultValue"> @row.afac_addr2</span><br />
                    <span class="resultLabel">Driver ID:&nbsp;</span><span class="resultValue"> @row.afmr_driver_id</span><br />
                    <span class="resultLabel">Register ID:&nbsp;</span><span class="resultValue"> @row.afmr_touchread_register</span><br />
                    <span class="resultLabel">Transmitter ID:&nbsp;</span><span class="resultValue"> @row.afmr_mxu</span><br />
                </div>
            }

        }
    </div>
</div>
<br /><br />

@ #39;/'应用程序.不正确的语法

下面是调试此类问题的方法。在foreach行之前,放置@selectQueryString,以便SQL字符串显示在输出中。然后在foreach循环中把@*放在foreach前面,然后把*@放在foreach循环的右括号后面,从而注释掉foreach。循环不会运行,但是您将看到SQL的基础。这样可以调试不同的路径