asp.net – SqlDataSource和存储过程调用问题
我偶然发现了一个问题,无法自己弄明白.希望有人能帮我解决它.
所以,我在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上指定引脚(… / Default.aspx而不是… / Default.aspx?pin = somevalue)或指定一个空行(… / Default.aspx? pin =)没有任何对存储过程的调用(我用SQL Server Profiler检查它). 而且,如果我用一个简单的替换QueryStringParameter <asp:Parameter Name="pin" DbType="String" /> 并且不指出DefaultValue值,重复该情况并且不对存储过程进行任何调用.这种行为的原因是什么? 我是asp.net的新手,可能会忽略一些东西,但我甚至尝试以编程方式而不是声明性地在代码隐藏文件中执行相同操作,结果是相同的.我唯一能发现的是,在这种情况下,会触发SqlDataSource的Selecting事件,但是不会触发.也许会出现某种错误? 无论如何,任何形式的帮助将不胜感激. 解决方法
SqlDataSource对象有一个名为
CancelSelectOnNullParameter的属性.它的默认值为true,所以我认为你所看到的行为是预期的,尽管不是很明显.尝试将此属性设置为false.
<asp:SqlDataSource ID="sds2" runat="server" ConnectionString="..." SelectCommand="spTest" SelectCommandType="StoredProcedure" CancelSelectOnNullParameter="false" > 此外,您可能会发现Parameter类的ConvertEmptyStringToNull属性(QueryStringParameter扩展此属性)有一些用处,具体取决于存储的proc是否/如何处理空值.它的默认值也是true. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- query-string – asp .net 2.0上的最大查询字符串长度
- asp.net-mvc – ASP.NET MVC AjaxHelper是否处理了降级?
- asp.net-mvc – 使用查询字符串参数重写遗留URL
- asp.net core webapi文件上传
- asp.net – 使用Spark视图引擎在局部视图中使用不同的viewm
- 如何缓存输出的action方法,返回图像到asp.net mvc中的视图?
- asp.net-mvc – 在ASP.NET MVC控制器结果中设置HTTP状态不呈
- asp.net – 什么是Eval(“this”)的正确等价物
- asp.net-mvc-3 – 如何使用App_Code帮助程序使用ASP.NET MV
- .net – ANTS Memory Profiler – 我应该关注哪个内存?