这让我很生气,即使现在并不重要,我也想知道发生了什么。
我有一个名为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" />
它返回表中的所有记录(不按指定的默认值过滤)。
为什么SelectParameter的显式编码不会返回任何数据,即使我的SelectCommand或我的存储过程都没有对它进行任何引用?这对我来说没有意义!
答案 0 :(得分:0)
<asp:SqlDataSource ID="SQLClient" runat="server"
ConnectionString="<%$ ConnectionStrings:TestDBConnectionString %>"
SelectCommand="ClientSelect" SelectCommandType="StoredProcedure" >
<SelectParameters>
<asp:Parameter Name="ClientID" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>
答案 1 :(得分:0)
好吧,我不是ASP.NET的专家,但是我知道,如果你的SP没有任何参数,但你仍然在查询中指定它们 - 它应该抛出异常,除非你已经关闭了这种异常(SQL SERVER)。
此外,如果指定了一个参数但没有应用任何值,它也会导致错误,因为通常任何代码都会被您访问SQL Server的驱动程序转换为T-SQL代码。所以在第一次你会得到这个:
EXEC ClientSelect @ClietntId =
接下来就是那个
EXEC ClientSelect @ ClietntId = 1
没关系。 好吧,人们说如果指定的参数不存在,则忽略它们。 DefaultValue应该是。否则最好尝试代码@Dhaval建议并给出反馈。
答案 2 :(得分:0)
我认为您需要指定一种方法来获取已定义参数的实际值。
例如;如果要从会话变量获取参数值,则必须将SelectParameter定义为
<!-- To get ClientID from a session variable called myClientId -->
<asp:SessionParameter Name="ClientID" DbType="Int16"
DefaultValue="0" SessionField="myClientId"/>
<!-- To Get ClientID from a dropdown List called ddlClients -->
<asp:ControlParameter Name="ClientID" DbType="Int16"
DefaultValue="0" ControlID="ddlClients"/>
<!-- YOUR CODE -->
<asp:SqlDataSource ID="SQLClient" runat="server"
ConnectionString="<%$ ConnectionStrings:TestDBConnectionString %>"
SelectCommand="ClientSelect" SelectCommandType="StoredProcedure" >
<SelectParameters>
<!-- Add correct parameter type as appropriate -->
</SelectParameters>
</asp:SqlDataSource>