2012-08-10 89 views
0

我在SQL服务器的查询,如下:如何在asp.net中执行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 
+0

从那里你需要开始日期和结束日期参数的值???有没有文本框?如果sp是startdate,那么sp只返回一个column_date,那么enddate是哪里? – 2012-08-10 19:53:43

+0

是的我有一个.html文件,其中有两个文本框名称startdate和enddate。 我添加了由mosaklevN给出的代码,但是当我在文本框中输入日期并提交时,只有该行显示在网页'GridView示例:执行StoredProcedure'它不显示表格中的数据。 – user1449596 2012-08-11 05:42:53

+0

我编辑两个文本框中的代码,见下文。 – moskalevN 2012-08-11 06:58:40

回答

0
<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> 
+0

FYI开始日期并且enddate列在gridview中不存在。修改你的代码。 – 2012-08-10 19:52:20

+0

我怎样才能在gridview中添加它们? – user1449596 2012-08-11 05:44:40