1

エラー:(ASP.NET/C#を使用するMicrosoft Visual Studio):

サブクエリは複数の値を返しました。サブクエリが=、!=、<、<=、>、> =の後に続く場合、またはサブクエリが式として使用される場合、これは許可されません。

詳細:前のエラーは次のコードが原因で発生します。これは、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は、ドロップダウンリスト参照からのものであることを意味します。)

コメント:明らかに、コードにはサブクエリがあります。ただし、サブクエリ以外の制限を回避するにはどうすればよいですか?:(これらのものは通常どのように処理されますか?

4

2 に答える 2

1
 (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) 
于 2013-03-26T04:53:42.463 に答える
0

サブクエリの問題は、=、<、<=、>、> =などの操作を実行しようとすると、1つの値を別の値とのみ比較でき、1つの値を値のセットと比較できないことです。このように、サブクエリSELECT [B] FROM [Table2] WHERE [C] = @Cが複数の値を返すとすると、このエラーがスローされます。

サブクエリが1つの値のみを返すことが確実な場合は(おそらく[C]が主キーであるため)、このサブクエリを使用できます。それ以外の場合は、@Deveshanswerを使用できます。

于 2013-03-26T06:05:43.820 に答える