簡體   English   中英

SqlDataSource中的子查詢導致錯誤(asp.net)

[英]subquery in SqlDataSource causes error (asp.net )

錯誤:(使用ASP.NET/C#的Microsoft Visual Studio):

子查詢返回的值超過1。 當子查詢遵循=,!=,<,<=,>,> =或將子查詢用作表達式時,不允許這樣做。

更多詳細信息:先前的錯誤是由以下代碼引起的。 它是一個GridView及其關聯的SQLDataSource。

<asp:GridView ID="gGrid" runat="server" AutoGenerateColumns="False" 
    DataSourceID="sqlAll" AllowPaging="True" 
    onpageindexchanging="grdGrid_PageIndexChanging">
    <Columns>
        <asp:BoundField DataField="A" HeaderText="A" 
            SortExpression="A" />
        <asp:BoundField DataField="G" HeaderText="G" 
            SortExpression="PeriodCode" />
        <asp:BoundField DataField="Value" HeaderText="Value" SortExpression="Value" />
    </Columns>
</asp:GridView>


    <asp:SqlDataSource ID="sqlAll" runat="server" 
        ConnectionString="<%$ ConnectionStrings:ConnectionDB01 %>" 
        SelectCommand="SELECT [A], [G], [H] FROM [Table1] 
    WHERE [B] = 
        (SELECT [B] 
          FROM [Table2] 
            WHERE [C] = @C) 
    AND ([D] = 
        (SELECT [D] 
            FROM [Table3] 
              WHERE [E] = @E))
    AND ([A] < @A) AND ([A] > @A2)">
        <SelectParameters>
            <asp:ControlParameter ControlID="ddlBlah2" Name="AreaName" 
                PropertyName="SelectedValue" Type="String" />
            <asp:ControlParameter ControlID="ddlBlah" Name="B" 
                PropertyName="SelectedValue" Type="String" />
            <asp:ControlParameter ControlID="txtEndA" Name="A" 
                PropertyName="Text" Type="Decimal" />
            <asp:ControlParameter ControlID="txtStartA" Name="A2" 
                PropertyName="Text" Type="Decimal" />
         </SelectParameters>
    </asp:SqlDataSource>
    <br />

(@Letter表示它們來自下拉列表參考。)

注釋:顯然,代碼中包含子查詢。 但是,如何解決非子查詢限制? :(這些事情通常如何處理?

 (SELECT [B] 
      FROM [Table2] 
        WHERE [C] = @C) 
 change this query to like this
     (SELECT TOP 1[B] 
       FROM [Table2] 
        WHERE [C] = @C) 


 or use IN instead of =

     WHERE [B] IN 
      (SELECT [B] 
      FROM [Table2] 
        WHERE [C] = @C) 

子查詢的問題是,當您嘗試執行=,<,<=,>,> =之類的某些操作時,它只能將一個值與另一個值進行比較,而不能將一個值與一組值進行比較。 假設這樣,您的子查詢SELECT [B] FROM [Table2] WHERE [C] = @C返回多個值,它將引發此錯誤。

如果您確定子查詢只會返回一個值(可能是因為[C]是主鍵),則可以使用此子查詢,否則可以使用@Devesh答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM