当前位置: 首页 > 面试题库 >

SqlDataSource和存储过程调用问题

班承德
2023-03-14
问题内容

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

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

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

以及在应用程序中带有SqlDataSourceGridView控件的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还是一个新手,可能会忽略一些东西,但是我什至尝试以编程方式而不是声明方式在代码隐藏文件中执行相同的操作,结果是相同的。我唯一能发现的是,在这种情况下会触发Selecting事件SqlDataSource,但Selected不会触发。也许会发生某种错误?

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


问题答案:

SqlDataSource对象具有称为的属性[CancelSelectOnNullParameter](http://msdn.microsoft.com/en- us/library/system.web.ui.webcontrols.sqldatasource.cancelselectonnullparameter.aspx)。它的默认值是true,因此我认为您所看到的行为是预期的,尽管并不明显。尝试将此属性设置为false

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

另外,您可能会发现类的[ConvertEmptyStringToNull](http://msdn.microsoft.com/en- us/library/system.web.ui.webcontrols.parameter.convertemptystringtonull.aspx)属性ParameterQueryStringParameter对此进行了扩展),这取决于存储的过程是否/如何处理null值。其默认值也是true如此。



 类似资料:
  • 问题内容: 我试图在postgres 9.3上使用sql调用函数内的函数。 这个问题与我的另一篇文章有关。 我写了下面的函数。到目前为止,我还没有合并任何类型的save-output(COPY)语句,因此我试图通过创建嵌套函数print-out函数来解决此问题。 以上功能有效。 尝试创建嵌套函数。 调用嵌套函数。 输出 上面给出了这个。但是,当在print_out()中将arg1,arg2替换为’

  • 我使用JDBC这样调用这个过程: 它向我抛出一个错误,通知调用格式错误。 但是如果我像这样直接在IDE中运行调用:

  • 从1.r.58开始, 支持出参, 之前的版本仅支持入参. 从实现方式上说, 是通过扩展自定义SQL的含义及上下文来实现 仅含义入参的存储过程 // 建表,删除老的存储过程. dao.create(Pet.class, true); dao.insert(Pet.create("wendal")); dao.execute(Sqls.create("DROP PRO

  • 主要内容:创建CallableStatement对象,关闭CallableStatement对象,JDBC SQL转义语法在讨论JDBC Statement教程文章时,我们已经学习了如何在JDBC中使用存储过程。 本教程文章与该部分类似,但它将讲解演示有关JDBC SQL转义语法的其他信息。 就像对象创建和对象一样,它可使用同样的方式创建对象,该对象将用于执行对数据库存储过程的调用。 创建CallableStatement对象 假设需要执行以下Oracle存储过程 - 注意:上面的存储过程是为O

  • 目前,我正在作业步骤中使用JdbcCursorItemReader和FlatFileItemWriter。 由于性能问题,我们不得不使用存储过程。 在Spring Batch 2.0中有没有一种方法可以调用存储过程。释放? ...其他配置 如何使用可调用语句编写自定义数据库读取器...感谢示例代码..谢谢,。

  • 我创建了一个存储过程,如下所示: //mysql中的存储过程 并且我正在调用Java中的存储过程,如下所示: //使用JDBC调用存储过程 但它显示了一个编译时异常,如下所示: CAN在参数中为存储的函数调用的返回值设置。