选择参数异常

时间:2013-08-29 15:57:37

标签: asp.net sql-server

这让我很生气,即使现在并不重要,我也想知道发生了什么。

我有一个名为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或我的存储过程都没有对它进行任何引用?这对我来说没有意义!

3 个答案:

答案 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>