【问题标题】:how to execute sql server stored procedure input parameter in asp.net?如何在asp.net中执行sql server存储过程输入参数?
【发布时间】:2012-08-10 19:18:48
【问题描述】:

我在 sql server 中有如下查询:

Alter procedure testprocedure
As
Begin
select column_date, sum(qty1), sum(qty2), sum(qty3) from table1
End
Go

我使用下面的代码来访问asp.net 中的存储过程。即使我从另一个来源复制了这段代码,但它对我有用。

<%@ Page Language="C#" AutoEventWireup="true" %>  

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<script runat="server">  

</script>  
<html xmlns="http://www.w3.org/1999/xhtml" >  
<head id="Head1" runat="server">  
</head>  
<body>  
<form id="form1" runat="server">  
<div>  
    <h2 style="color:Navy; font-style:italic;">GridView Example: Execute StoredProcedure</h2>  
    <asp:SqlDataSource   
        ID="SqlDataSource1"  
        runat="server"  
        ConnectionString="<%$ ConnectionStrings:databasename %>"  
        SelectCommand="testprocedure"  
        SelectCommandType="StoredProcedure"  
        >  
    </asp:SqlDataSource>  
    <asp:GridView   
        ID="GridView1"  
        runat="server"  
        DataSourceID="SqlDataSource1"  
        AutoGenerateColumns="true"  
        AllowPaging="true"  
        PageSize="31"  
        BorderColor="Salmon"  
        Font-Names="Comic Sans MS"  
        Width="650"  
        >  
        <HeaderStyle BackColor="IndianRed" ForeColor="Snow" Height="45"/>  
        <RowStyle BackColor="DarkSalmon" ForeColor="Snow" Font-Italic="true" />  
        <PagerStyle   
            Height="45"   
            HorizontalAlign="Right"   
            BackColor="RosyBrown"  
            Font-Bold="true"  
            Font-Size="X-Large"  
            ForeColor="Snow"  
            />  
        <PagerSettings Mode="Numeric" />  
    </asp:GridView>  
</div>  
</form>  
</body>  
</html> 

现在我像这样更改了我的查询以接受参数中的日期:

Alter procedure testprocedure @startdate nchar(8), @enddate nchar(8)
As
Begin
select column_date, sum(qty1), sum(qty2), sum(qty3) from table1
where column_date between @startdate and @enddate
End
Go

请注意我的日期列的数据类型为 nchar(8)。 现在我想更改上面发布的以前的 asp.net 代码以接受此日期参数。我不知道编辑代码,因为我是非常新的 asp.net 并且仍在学习。

错误:

 Could not find control 'textboxStartDate' in ControlParameter 'startdate'.

 Description: An unhandled exception occurred during the execution of the current web request.
 Please review the stack trace for more information about the error and where it originated in 
 the code. 

 Exception Details: System.InvalidOperationException: Could not find control 'textboxStartDate'      
 in ControlParameter 'startdate'.

 Source Error: 

 An unhandled exception was generated during the execution of the current web request. 
 Information regarding the origin and location of the exception can be identified using the   
 exception stack trace below.

  Stack Trace: 


 [InvalidOperationException: Could not find control 'textboxStartDate' in ControlParameter          
 'startdate'.]
  System.Web.UI.WebControls.ControlParameter.Evaluate(HttpContext context, Control control)        
 +2106934
 System.Web.UI.WebControls.Parameter.UpdateValue(HttpContext context, Control control) +50
  System.Web.UI.WebControls.ParameterCollection.UpdateValues(HttpContext context, Control
 control) +113
 System.Web.UI.WebControls.SqlDataSource.LoadCompleteEventHandler(Object sender, EventArgs e) +46
 System.Web.UI.Page.OnLoadComplete(EventArgs e) +9008578
 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean 
  includeStagesAfterAsyncPoint) +2350

【问题讨论】:

  • 从哪里获取 startdate 和 enddate 参数的值???有没有文本框?你 sp 只返回一个 column_date 如果它是 startdate 那么 enddate 在哪里???
  • 是的,我有一个 .html 文件,其中包含两个文本框,名称为 startdate 和 enddate。我添加了mosaklevN给出的代码,但是当我在文本框中输入日期并提交时,网页GridView Example: Execute StoredProcedure中只显示这一行它不显示表格中的数据。
  • 我从两个文本框中编辑代码,见下文。
  • 感谢 moskalevN,但现在我在添加新代码后收到上面发布的错误
  • 只需添加两个文本框,名称分别为textboxStartDate和textboxEndDate。我相信你可以

标签: asp.net sql-server-2008


【解决方案1】:
<asp:SqlDataSource   
        ID="SqlDataSource1"  
        runat="server"  
        ConnectionString="<%$ ConnectionStrings:databasename %>"  
        SelectCommand="testprocedure"  
        SelectCommandType="StoredProcedure">
  <SelectParameters>
     <--for hardcode values  -->
     <asp:Parameter Name="startdate" Type="String" />
     <asp:Parameter Name="enddate" Type="String"/>
     <!-- or values from controls  -->
      <asp:ControlParameter Name="startdate" ControlID="textboxStartDate" PropertyName="Text" /> 
     <asp:ControlParameter Name="enddate" ControlID="textboxEndDate" PropertyName="Text" />               
 </SelectParameters>
</asp:SqlDataSource>

  <asp:TextBox ID="textboxStartDate" runat="server"></asp:TextBox>
    <asp:TextBox ID="textboxEndDate" runat="server"></asp:TextBox>

【讨论】:

  • 仅供参考,开始日期和结束日期列在网格视图中不存在。请更正您的代码。
  • 如何在gridview中添加它们?
猜你喜欢
  • 1970-01-01
  • 2019-07-18
  • 2018-08-14
  • 2017-11-02
  • 1970-01-01
  • 2011-05-07
  • 1970-01-01
  • 2016-11-02
  • 1970-01-01
相关资源
最近更新 更多