0

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

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

4

3 回答 3

0

你能试试这个吗?

<asp:SqlDataSource ID="SQLClient" runat="server"
        ConnectionString="<%$ ConnectionStrings:TestDBConnectionString %>" 
        SelectCommand="ClientSelect" SelectCommandType="StoredProcedure" >
        <SelectParameters>
            <asp:Parameter Name="ClientID" Type="Int32"  />
        </SelectParameters>
</asp:SqlDataSource>
于 2013-08-29T16:12:17.070 回答
0

好吧,我不是 ASP.NET 方面的专家,但我知道,如果您的 SP 没有任何参数,但您仍然在查询中指定它们 - 它应该抛出异常,除非您已经转向这种类型异常 (SQL SERVER) 关闭。

此外,如果指定了参数,但没有应用值,也会导致错误,因为通常任何代码都会被您访问 SQL Server 的驱动程序转换为 T-SQL 代码。所以在第一时间你会得到这个:

执行 ClientSelect @ClietntId=

下一个是

执行客户端选择 @ClietntId=1

没关系。好吧,人们说如果指定了不存在的参数,它们将被忽略。DefaultValue 应该是。否则最好尝试@Dhaval 建议的代码并提供反馈。

于 2013-08-29T16:15:48.873 回答
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>
于 2013-08-29T16:28:42.793 回答