gpt4 book ai didi

asp.net - SqlDataSource 和存储过程调用问题

转载 作者:行者123 更新时间:2023-12-04 20:44:07 28 4
gpt4 key购买 nike

我偶然发现了一个问题,无法自己解决。希望有人能帮我解决。

所以,我在 SQL Server 2005 数据库中有一个简单的存储过程

CREATE PROCEDURE spTest
@pin varchar(128)
AS
BEGIN
SELECT @Pin as Param
END

和一个带有 SqlDataSource 的 asp.net 页面和一个 GridView应用程序中的控件(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 还是个新手,可能会忽略一些东西,但我什至尝试以编程方式而不是声明方式在代码隐藏文件中做同样的事情,结果是一样的。我唯一能发现的是,在这种情况下, Selecting SqlDataSource事件被解雇,但 Selected不是。也许会发生某种错误?

无论如何,任何形式的帮助将不胜感激。

最佳答案

SqlDataSource对象有一个名为 CancelSelectOnNullParameter 的属性.其默认值为 true ,所以我认为您看到的行为是预期的,尽管并不明显。尝试将此属性设置为 false .

<asp:SqlDataSource 
ID="sds2"
runat="server"
ConnectionString="..."
SelectCommand="spTest"
SelectCommandType="StoredProcedure"
CancelSelectOnNullParameter="false"
>

此外,您可能会找到 ConvertEmptyStringToNull Parameter 的属性(property)类( QueryStringParameter 扩展此)有一些用处,这取决于您的存储过程是否/如何处理 null值。其默认值为 true以及。

关于asp.net - SqlDataSource 和存储过程调用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8351308/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com