GridView SelectCommand отсутствует ГДЕ во время выполнения - PullRequest
0 голосов
/ 10 февраля 2012

У меня есть GridView. Моя команда SelectCommand в коде работает, если я скопирую и вставлю ее в SQL Server Management Studio. Выполняется нормально.

Если я запускаю страницу и нажимаю Редактировать для любой строки, я получаю сообщение об ошибке:

"Неверный синтаксис рядом с ключевым словом" IS "."

Я пытался узнать, что происходит с использованием SQL Server Profiler. Вот как выглядит SelectCommand и что получает SQL ...

Выберите команду из supplies.ascx

SELECT some stuff FROM here WHERE (this IS NULL) and (that=1) ORDER BY this DESC

Отчеты SQL Server Profiler

SELECT some stuff FROM here (this IS NULL) and (that=1) ORDER BY this DESC

Я не поместил здесь никакого кода, потому что я не совсем уверен, что будет актуально, и не хотел загружать пост ненужными строками кода. Пожалуйста, дайте мне знать, что вы хотели бы увидеть, чтобы помочь.

Запрошенный код ниже. Я не помещал все из GridView в ... Это довольно большой. При необходимости я могу обновить.

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="fldSupReqID"
                DataSourceID="SqlDataSource1" 
                EmptyDataText="There are no data records to display." AllowSorting="True" 
                CellPadding="4" ForeColor="#333333" Font-Size="10px">
                <RowStyle BackColor="#EFF3FB" />

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:myConnectionString %>"
                DeleteCommand="DELETE FROM [tblSupplyRequests] WHERE [fldSupReqID] = @fldSupReqID"
                InsertCommand="INSERT INTO [tblSupplyRequests] ([fldManufacturerID], [fldItemID], [fldFeeTypeID], [fldRequestDate], [fldStamp], [fldAddedByUser], [fldBID]) VALUES (@fldManufacturerID, @fldItemID, @fldFeeTypeID, @fldRequestDate, @fldStamp, @fldAddedByUser, @fldBID)"       




                ProviderName="<%$ ConnectionStrings:myConnectionString.ProviderName %>" SelectCommand="SELECT tblSupplyRequests.fldSupReqID, tblSupplyRequests.fldOrderToShipDate, tblSupplyRequests.fldBID AS BID, tblMerchantIDs.fldMerchantID AS MerchantID, salescontactinfo.sname_of_business AS [Merchant Name], salescontactinfo.scontactname1 AS Contact, salescontactinfo.scontactn1phone1 AS Phone, tblSupplyRequests.fldRequestDate, tblSupplyRequests.fldAddedByUser AS RequestedBy, INVtblManufacturers.fldManufacturerName AS [Term Manuf], INVtblInventoryItems_1.fldItemName AS [Term Model], INVtblInventoryTypes.fldInventoryTypename AS [Item Type], tblSupplyRequests.fldNumItemsRequested AS [Num Items], tblSupplyRequests.fldPaperItemID, tblSupplyRequests.fldPerItemCost, INVtblInventoryItems.fldMiscDesc, tblSupplyRequests.fldPersonCalling, tblSupplyRequests.fldTitlePersonCalling, tblSupplyRequests.fldNotes, salescontactinfo.sstate, tblSupplyRequests.fldManufacturerID, tblSupplyRequests.fldItemID, tblSupplyRequests.fldStamp, tblSupplyRequests.fldOrderToShipDate AS Expr1, tblSupplyRequests.fldOrderToShipBy FROM INVtblInventoryItems INNER JOIN tblSupplyRequests INNER JOIN salescontactinfo ON tblSupplyRequests.fldBID = salescontactinfo.sbusinessid LEFT OUTER JOIN tblMerchantIDs ON salescontactinfo.sbusinessid = tblMerchantIDs.fldBID LEFT OUTER JOIN INVtblManufacturers ON tblSupplyRequests.fldManufacturerID = INVtblManufacturers.fldManufacturerID ON INVtblInventoryItems.fldItemID = tblSupplyRequests.fldPaperItemID LEFT OUTER JOIN INVtblInventoryTypes ON tblSupplyRequests.fldInventoryTypeID = INVtblInventoryTypes.fldInventoryTypeID LEFT OUTER JOIN INVtblInventoryItems AS INVtblInventoryItems_1 ON tblSupplyRequests.fldItemID = INVtblInventoryItems_1.fldItemID WHERE (tblSupplyRequests.fldOrderToShipDate IS NULL) AND (tblMerchantIDs.fldMIDStatusID=1) ORDER BY tblSupplyRequests.fldRequestDate DESC"                   




                UpdateCommand="UPDATE tblSupplyRequests SET fldOrderToShipDate=@fldOrderToShipDate, fldNotes = @fldNotes, fldTitlePersonCalling = @fldTitlePersonCalling, fldPersonCalling = @fldPersonCalling, fldRequestDate = @fldRequestDate WHERE (fldSupReqID = @fldSupReqID)">
                <DeleteParameters>
                    <asp:Parameter Name="fldSupReqID" Type="Int32" />
                </DeleteParameters>
                <InsertParameters>
                    <asp:Parameter Name="fldManufacturerID" Type="Int32" />
                    <asp:Parameter Name="fldItemID" Type="Int32" />
                    <asp:Parameter Name="fldFeeTypeID" Type="Int32" />
                    <asp:Parameter Name="fldRequestDate" Type="DateTime" />
                    <asp:Parameter Name="fldStamp" Type="DateTime" />
                    <asp:Parameter Name="fldAddedByUser" Type="String" />
                    <asp:Parameter Name="fldBID" Type="Int32" />
                </InsertParameters>
                <UpdateParameters>
                    <asp:Parameter Name="fldOrderToShipDate" Type="DateTime" />
                    <asp:Parameter Name="fldNotes" Type="String" />
                    <asp:Parameter Name="fldTitlePersonCalling" Type="String" />
                    <asp:Parameter Name="fldPersonCalling" Type="String" />
                    <asp:Parameter Name="fldRequestDate" Type="DateTime" />
                    <asp:Parameter Name="fldSupReqID" Type="Int32" />
                </UpdateParameters>
            </asp:SqlDataSource>

И вот что ловит SQL Server Profiler ...

SELECT tblSupplyRequests.fldSupReqID, tblSupplyRequests.fldOrderToShipDate, tblSupplyRequests.fldBID AS BID, tblMerchantIDs.fldMerchantID AS MerchantID, salescontactinfo.sname_of_business AS [Merchant Name], salescontactinfo.scontactname1 AS Contact, salescontactinfo.scontactn1phone1 AS Phone, tblSupplyRequests.fldRequestDate, tblSupplyRequests.fldAddedByUser AS RequestedBy, INVtblManufacturers.fldManufacturerName AS [Term Manuf], INVtblInventoryItems_1.fldItemName AS [Term Model], INVtblInventoryTypes.fldInventoryTypename AS [Item Type], tblSupplyRequests.fldNumItemsRequested AS [Num Items], tblSupplyRequests.fldPaperItemID, tblSupplyRequests.fldPerItemCost, INVtblInventoryItems.fldMiscDesc, tblSupplyRequests.fldPersonCalling, tblSupplyRequests.fldTitlePersonCalling, tblSupplyRequests.fldNotes, salescontactinfo.sstate, tblSupplyRequests.fldManufacturerID, tblSupplyRequests.fldItemID, tblSupplyRequests.fldStamp, tblSupplyRequests.fldOrderToShipDate AS Expr1, tblSupplyRequests.fldOrderToShipBy FROM INVtblInventoryItems INNER JOIN tblSupplyRequests INNER JOIN salescontactinfo ON tblSupplyRequests.fldBID = salescontactinfo.sbusinessid LEFT OUTER JOIN tblMerchantIDs ON salescontactinfo.sbusinessid = tblMerchantIDs.fldBID LEFT OUTER JOIN INVtblManufacturers ON tblSupplyRequests.fldManufacturerID = INVtblManufacturers.fldManufacturerID ON INVtblInventoryItems.fldItemID = tblSupplyRequests.fldPaperItemID LEFT OUTER JOIN INVtblInventoryTypes ON tblSupplyRequests.fldInventoryTypeID = INVtblInventoryTypes.fldInventoryTypeID LEFT OUTER JOIN INVtblInventoryItems AS INVtblInventoryItems_1 ON tblSupplyRequests.fldItemID = INVtblInventoryItems_1.fldItemID  (tblSupplyRequests.fldOrderToShipDate IS NULL) AND (tblMerchantIDs.fldMIDStatusID=1) ORDER BY tblSupplyRequests.fldRequestDate DESC

1 Ответ

0 голосов
/ 16 февраля 2012

Мне неприятно это говорить, но может случиться так, что ASP.NET неправильно анализирует запрос из-за всех вложенных INNER JOIN, которые предшествуют ему в одной строке.Интересно, поможет ли вообще форматирование вашего SQL?В сети есть очень крутой инструмент для точного форматирования ваших операторов SQL .

Вот отформатированная версия вашего SQLDataSource:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:myConnectionString %>"
    DeleteCommand=" DELETE FROM [tblSupplyRequests] 
                    WHERE  [fldSupReqID] = @fldSupReqID"
    InsertCommand=" INSERT INTO [tblSupplyRequests] ([fldManufacturerID],[fldItemID],[fldFeeTypeID],[fldRequestDate],[fldStamp],[fldAddedByUser],[fldBID]) 
                    VALUES (@fldManufacturerID,@fldItemID,@fldFeeTypeID,@fldRequestDate,@fldStamp,@fldAddedByUser,@fldBID)"       
    ProviderName="<%$ ConnectionStrings:myConnectionString.ProviderName %>" 
    SelectCommand=" SELECT tblsupplyrequests.fldsupreqid, 
                           tblsupplyrequests.fldordertoshipdate, 
                           tblsupplyrequests.fldbid                  AS bid, 
                           tblmerchantids.fldmerchantid              AS merchantid, 
                           salescontactinfo.sname_of_business        AS [Merchant Name], 
                           salescontactinfo.scontactname1            AS contact, 
                           salescontactinfo.scontactn1phone1         AS phone, 
                           tblsupplyrequests.fldrequestdate, 
                           tblsupplyrequests.fldaddedbyuser          AS requestedby, 
                           invtblmanufacturers.fldmanufacturername   AS [Term Manuf], 
                           invtblinventoryitems_1.flditemname        AS [Term Model], 
                           invtblinventorytypes.fldinventorytypename AS [Item Type], 
                           tblsupplyrequests.fldnumitemsrequested    AS [Num Items], 
                           tblsupplyrequests.fldpaperitemid, 
                           tblsupplyrequests.fldperitemcost, 
                           invtblinventoryitems.fldmiscdesc, 
                           tblsupplyrequests.fldpersoncalling, 
                           tblsupplyrequests.fldtitlepersoncalling, 
                           tblsupplyrequests.fldnotes, 
                           salescontactinfo.sstate, 
                           tblsupplyrequests.fldmanufacturerid, 
                           tblsupplyrequests.flditemid, 
                           tblsupplyrequests.fldstamp, 
                           tblsupplyrequests.fldordertoshipdate      AS expr1, 
                           tblsupplyrequests.fldordertoshipby 
                    FROM   invtblinventoryitems 
                           INNER JOIN tblsupplyrequests 
                                      INNER JOIN salescontactinfo 
                                        ON tblsupplyrequests.fldbid = salescontactinfo.sbusinessid 
                                      LEFT OUTER JOIN tblmerchantids 
                                        ON salescontactinfo.sbusinessid = tblmerchantids.fldbid 
                                      LEFT OUTER JOIN invtblmanufacturers 
                                        ON tblsupplyrequests.fldmanufacturerid = invtblmanufacturers.fldmanufacturerid 
                             ON invtblinventoryitems.flditemid = tblsupplyrequests.fldpaperitemid 
                           LEFT OUTER JOIN invtblinventorytypes 
                             ON tblsupplyrequests.fldinventorytypeid = invtblinventorytypes.fldinventorytypeid 
                           LEFT OUTER JOIN invtblinventoryitems AS invtblinventoryitems_1 
                             ON tblsupplyrequests.flditemid = invtblinventoryitems_1.flditemid 
                    WHERE  ( tblsupplyrequests.fldordertoshipdate IS NULL ) 
                           AND ( tblmerchantids.fldmidstatusid = 1 ) 
                    ORDER  BY tblsupplyrequests.fldrequestdate DESC"
    UpdateCommand=" UPDATE tblsupplyrequests 
                    SET    fldordertoshipdate = @fldOrderToShipDate, 
                           fldnotes = @fldNotes, 
                           fldtitlepersoncalling = @fldTitlePersonCalling, 
                           fldpersoncalling = @fldPersonCalling, 
                           fldrequestdate = @fldRequestDate 
                    WHERE  ( fldsupreqid = @fldSupReqID )" >
    <DeleteParameters>
        <asp:Parameter Name="fldSupReqID" Type="Int32" />
    </DeleteParameters>
    <InsertParameters>
        <asp:Parameter Name="fldManufacturerID" Type="Int32" />
        <asp:Parameter Name="fldItemID" Type="Int32" />
        <asp:Parameter Name="fldFeeTypeID" Type="Int32" />
        <asp:Parameter Name="fldRequestDate" Type="DateTime" />
        <asp:Parameter Name="fldStamp" Type="DateTime" />
        <asp:Parameter Name="fldAddedByUser" Type="String" />
        <asp:Parameter Name="fldBID" Type="Int32" />
    </InsertParameters>
    <UpdateParameters>
        <asp:Parameter Name="fldOrderToShipDate" Type="DateTime" />
        <asp:Parameter Name="fldNotes" Type="String" />
        <asp:Parameter Name="fldTitlePersonCalling" Type="String" />
        <asp:Parameter Name="fldPersonCalling" Type="String" />
        <asp:Parameter Name="fldRequestDate" Type="DateTime" />
        <asp:Parameter Name="fldSupReqID" Type="Int32" />
    </UpdateParameters>
</asp:SqlDataSource>

Примечание:если ваши запросы в SQLDataSource становятся такими сложными, вы можете рассмотреть возможность перемещения этой логики на уровень доступа к классу / данным для дальнейшего сопровождения.Сказав это, я понимаю, что иногда вы застряли с тем, что у вас есть на данный момент =) Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...