0

これは私を夢中にさせています。今はそれほど重要ではありませんが、何が起こっているのか知りたいです.

ClientSelect というストアド プロシージャがあります。

SELECT * FROM dbo.Client

それだけです (何が起こっているのかを理解するために、すぐにそれを取り除いてしまいました!)

GridView を含む ASP.NET ページもあります。その DataSource は次のようになります。

<asp:SqlDataSource ID="SQLClient" runat="server"
        ConnectionString="<%$ ConnectionStrings:TestDBConnectionString %>" 
        SelectCommand="EXEC ClientSelect" >
        <SelectParameters>
            <asp:Parameter Name="ClientID" Type="Int32"  />
        </SelectParameters>
</asp:SqlDataSource>

SelectCommand は SelectParameter を参照せず、ストアド プロシージャはパラメーターを要求しないことに注意してください。このページは読み込まれますが、GridView は空です - データが返されません。

ただし、 SelectParameter を完全に削除するか、次のようにデフォルト値を追加すると:

<asp:Parameter Name="ClientID" Type="Int32" DefaultValue="1"  />

テーブル内のすべてのレコードを返します (指定された既定値によるフィルター処理は行いません)。

SelectCommand もストアド プロシージャもまったく参照していないのに、SelectParameter を明示的にコーディングするとデータが返されないのはなぜですか? 私には意味がありません!

4

3 に答える 3

0

ええと、私は ASP.NET の専門家ではありませんが、SP にパラメーターがなくても、クエリでパラメーターを指定すると、例外がスローされるはずです。例外 (SQL SERVER) オフ。

また、パラメーターが指定されているが、値が適用されていない場合もエラーが発生します。これは、通常、SQL Server にアクセスするドライバーによってコードが T-SQL コードに変換されるためです。したがって、初めてこれを取得します。

EXEC ClientSelect @ClientId=

そして次はそれです

EXEC ClientSelect @ClientId=1

これは大丈夫です。ええと、存在しないパラメーターが指定されている場合、それらは無視されると人々は言います。DefaultValue である必要があります。それ以外の場合は、@Dhaval が提案したコードを試してフィードバックを提供することをお勧めします。

于 2013-08-29T16:15:48.873 に答える