加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 07:27:53 所属栏目:asp.Net 来源:网络整理
导读:我偶然发现了一个问题,无法自己弄明白.希望有人能帮我解决它. 所以,我在SQL Server 2005数据库中有一个简单的存储过程 CREATE PROCEDURE spTest @pin varchar(128)ASBEGIN SELECT @Pin as ParamEND 和一个带有SqlDataSource和应用程序中的GridView控件的asp.
我偶然发现了一个问题,无法自己弄明白.希望有人能帮我解决它.

所以,我在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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读