这让我发疯,即使现在这并不重要,我也想知道发生了什么。
我有一个名为 ClientSelect 的存储过程:
SELECT * FROM dbo.Client
这就是它的全部内容(我已经把它剥离回来试图弄清楚发生了什么!)
我还有一个带有 GridView 的 ASP.NET 页面。它的数据源如下所示:
<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" />
它返回表中的所有记录(不按指定的默认值过滤)。
为什么 SelectParameter 的显式编码会导致不返回任何数据,即使我的 SelectCommand 或我的存储过程都没有对它进行任何引用?这对我来说没有意义!