【发布时间】:2011-12-02 03:06:41
【问题描述】:
我偶然发现了一个问题,但我自己无法解决。希望有人能帮我解决。
所以,我在 SQL Server 2005 数据库中有一个简单的存储过程
CREATE PROCEDURE spTest
@pin varchar(128)
AS
BEGIN
SELECT @Pin as Param
END
以及一个在应用程序中带有SqlDataSource 和GridView 控件的asp.net 页面(VS2008)
<asp:SqlDataSource
ID="sds2"
runat="server"
ConnectionString="..."
SelectCommand="spTest"
SelectCommandType="StoredProcedure"
>
<SelectParameters>
<asp:QueryStringParameter Name="pin" QueryStringField="pin" DbType="String"/>
</SelectParameters>
</asp:SqlDataSource>
<asp:GridView ID="gv" runat="server" DataSourceID="sds2"></asp:GridView>
如您所见,代码很简单。不过,如果我不费心在 url 上指定 pin(.../Default.aspx 而不是 .../Default.aspx?pin=somevalue)或指定空行(.../Default.aspx?pin=),则不会调用存储过程(我使用 SQL Server 检查它探查器)。
此外,如果我用简单的替换 QueryStringParameter
<asp:Parameter Name="pin" DbType="String" />
并且不指出 DefaultValue 值,情况会重复,并且不会调用存储过程。这种行为的原因是什么?
我是 asp.net 的新手,可能会忽略一些东西,但我什至尝试在代码隐藏文件中以编程方式而不是声明方式执行相同操作,结果是相同的。我唯一能发现的是,在这种情况下,SqlDataSource 的 Selecting 事件会被触发,但Selected 不会。也许会发生某种错误?
无论如何,任何形式的帮助都将不胜感激。
【问题讨论】:
标签: asp.net sql stored-procedures