【问题标题】:Webmatrix Server Error in '/' Application. Incorrect syntax“/”应用程序中的 Webmatrix 服务器错误。语法不正确
【发布时间】:2015-11-21 01:02:12
【问题描述】:

致力于将一些东西添加到其他人在 Webmatrix 中构建的网站。当我更改 SQL 查询时,它会引发语法错误,即使它以前运行良好。我一直在用这个错误把头撞到墙上。

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

“/”应用程序中的服务器错误。

“afac_acct_no”附近的语法不正确。

描述:执行过程中发生了未处理的异常 当前的网络请求。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。

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

来源错误:

foreach (var row in db.Query(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 />

【问题讨论】:

  • 这不是调试服务。将您的问题减少到核心代码行。
  • 如果您想连接其他条件,您添加的文本末尾需要一个空格,投票关闭,这只是一个错字。
  • 您还需要将 AND 放在辅助条件之前,而不是之后。
  • 我本来只包括核心问题,只是我不知道核心问题在哪里。在末尾添加一个空格没有任何作用。它仍然显示相同的错误。

标签: c# sql-server syntax-error webmatrix


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-05-15
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    相关资源
    最近更新 更多