将数据传递给存储过程并将数据返回到gridview

时间:2011-12-01 21:37:24

标签: c# asp.net sql

我正在编写一个asp .net网页,将文本框数据传递给存储过程,并在按钮点击时返回数据的gridview。我已经开始编写代码,但我对如何允许项目控制页面上的操作感到困惑。即按钮单击将字段值传递给存储过程以获取数据。

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>MSS Archived Data</title>

    <script language="javascript" type="text/javascript">
// <!CDATA[
// ]]>
    </script>

</head>
<body>
    <form id="form1" runat="server">
        <div>
            <table>
                <tr>
                    <td>
                        <asp:Label ID="Label1" runat="server" Text="First Name: "></asp:Label>
                        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                        <asp:Label ID="Label2" runat="server" Text="Last Name: "></asp:Label>
                        <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
                        <asp:Label ID="Label3" runat="server" Text="Street: "></asp:Label>
                        <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td>
                        <asp:Label ID="Label4" runat="server" Text="City: "></asp:Label>
                        <asp:TextBox ID="TextBox4" runat="server"></asp:TextBox>
                        <asp:Label ID="Label5" runat="server" Text="State: "></asp:Label>
                        <asp:TextBox ID="TextBox5" runat="server"></asp:TextBox>
                        <asp:Label ID="Label6" runat="server" Text="Zip: "></asp:Label>
                        <asp:TextBox ID="TextBox6" runat="server"></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td>
                        <asp:Button ID="Button1" runat="server" Text="Search" OnClick="Button1_Click" />
                    </td>                    
                </tr>
            </table>
            <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False"
                DataKeyNames="actID" DataSourceID="PersEWD_Database">
                <Columns>
                    <asp:BoundField DataField="actID" HeaderText="actID" ReadOnly="True" InsertVisible="False"
                        SortExpression="actID"></asp:BoundField>
                    <asp:BoundField DataField="actLogCreateDate" HeaderText="actLogCreateDate" SortExpression="actLogCreateDate">
                    </asp:BoundField>
                    <asp:BoundField DataField="actCustomerID" HeaderText="actCustomerID" SortExpression="actCustomerID">
                    </asp:BoundField>
                    <asp:BoundField DataField="actCampaignID" HeaderText="actCampaignID" SortExpression="actCampaignID">
                    </asp:BoundField>
                    <asp:BoundField DataField="actActionDate" HeaderText="actActionDate" SortExpression="actActionDate">
                    </asp:BoundField>
                    <asp:BoundField DataField="actActionCode" HeaderText="actActionCode" SortExpression="actActionCode">
                    </asp:BoundField>
                    <asp:BoundField DataField="actRelevantInfo" HeaderText="actRelevantInfo" SortExpression="actRelevantInfo">
                    </asp:BoundField>
                    <asp:BoundField DataField="actUnderwriter" HeaderText="actUnderwriter" SortExpression="actUnderwriter">
                    </asp:BoundField>
                    <asp:BoundField DataField="actAmount" HeaderText="actAmount" SortExpression="actAmount">
                    </asp:BoundField>
                    <asp:BoundField DataField="actPolicyType" HeaderText="actPolicyType" SortExpression="actPolicyType">
                    </asp:BoundField>
                    <asp:BoundField DataField="actPolicyNumber" HeaderText="actPolicyNumber" SortExpression="actPolicyNumber">
                    </asp:BoundField>
                    <asp:BoundField DataField="actReasonCode" HeaderText="actReasonCode" SortExpression="actReasonCode">
                    </asp:BoundField>
                    <asp:BoundField DataField="actSSN" HeaderText="actSSN" SortExpression="actSSN"></asp:BoundField>
                </Columns>
            </asp:GridView>
        </div>
    </form>
</body>
</html>


using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Data.Odbc;
using System.Web.Configuration;

public partial class _Default : System.Web.UI.Page
{
    DataSet ds = new DataSet();

    //Here we declare the parameter which we have to use in our application
    SqlCommand cmd = new SqlCommand();
    SqlParameter sp1 = new SqlParameter();
    SqlParameter sp2 = new SqlParameter();
    SqlParameter sp3 = new SqlParameter();
    SqlParameter sp4 = new SqlParameter();
    SqlParameter sp5 = new SqlParameter();
    SqlParameter sp6 = new SqlParameter();

    protected void Page_Load(object sender, EventArgs e)
    {
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        //string myConnection = "dsn=dsnNAME";
        string serverName = "serverName";
        string dbName = "dbName";
        string storedProcName = "";
        string parameterName = "@RecordType";
        int parameterValue = 0;
        string myConnString = "DRIVER={SQL Server};SERVER="+serverName+";Trusted_connection=yes;DATABASE="+dbName+";";




        OdbcConnection myConnection = new OdbcConnection(myConnString);
        myConnection.Open();
        //myConnection.Connection = myConnection;
        myConnection.CommandType = CommandType.StoredProcedure;
        myConnection.CommandText = "{call " + storedProcName + " (?, ?, ?, ?, ?, ?) }";
        cmd.Parameters.Add("@fName", SqlDbType.VarChar).Value = TextBox1.Text;
        cmd.Parameters.Add("@lName", SqlDbType.VarChar).Value = TextBox2.Text;
        cmd.Parameters.Add("@street", SqlDbType.VarChar).Value = TextBox3.Text;
        cmd.Parameters.Add("@city", SqlDbType.VarChar).Value = TextBox4.Text;
        cmd.Parameters.Add("@state", SqlDbType.VarChar).Value = TextBox5.Text;
        cmd.Parameters.Add("@zip", SqlDbType.varchar).Value = TextBox6.Text;

        myConnection.ExecuteNonQuery();
        myConnection.Connection.Close();
    }

}

由于

3 个答案:

答案 0 :(得分:1)

数据绑定的生命周期看起来像这样:

  1. 按钮单击 - 当用户按下该按钮时,您的按钮将触发Click事件。从这里开始,您将需要使用TextBox中的值调用存储过程。

  2. 数据检索 - 使用指定的参数执行存储过程,然后获取数据元素的集合。根据您可用的.Net Framework版本,我建议使用TableAdapters(旧技术,为您提供镜像数据库的表结构)或使用LINQ/Entity Framework(更新的技术,给出你是一个基于你的表的对象,并根据查询提供这些对象的列表)。 LINQ / EF是一些令人惊奇的东西,但是一些开发环境仍然不能达到.Net 3.5。

  3. 数据绑定 - 从存储过程中获取数据后,您将其设置为GridView的DataSource,然后调用DataBind方法。 GridView控件将自动处理迭代您提供的数据。如果您需要执行一些自定义列/格式设置,则会覆盖RowDataBound事件。

  4. 这个过程的每个方面都有很多细微差别和细节,但希望这能让你基本了解开始的事情。

答案 1 :(得分:0)

你快到了。您需要将select命令设置为存储过程的名称,然后将SelectCommandType设置为StoredProcedure。然后设置ControlParameter的PropertyName。

这会将您的GridView设置为数据绑定到回发时文本框的值(按钮单击可能会导致回发)

还要将GridView的DataSourceID设置为与SqlDataSource的ID匹配。

 <asp:SqlDataSource ID="Database" runat="server" ConnectionString="<%$ ConnectionStrings:DatabaseConnectionString %>"
            ProviderName="<%$ ConnectionStrings:Database_ConnectionString.ProviderName %>"
            SelectCommand="dbo.yourstoredproc" SelectCommandType="StoredProcedure"
            OnSelecting="Database_Selecting">
            <SelectParameters>
                <asp:ControlParameter ControlID="Text1" Name="CustomerID" PropertyName="Text" />
            </SelectParameters>
        </asp:SqlDataSource>

答案 2 :(得分:0)

一些指示:

1)使用<asp:textbox id="Text1" runat="server"/>而不是<input name="CustomerID" id="Text1" type="text" /> - 注意runat =“server”这允许数据源选择参数找到其输入源。

2)将gridview datasourceid指向sqldatasource(如果确实是数据的来源)。否则,“PersEWD_Database”数据源定义在哪里?

3)使你的sqldatasource sql脚本返回所有需要绑定在网格上的字段而不仅仅是CustomerID。

4)除非你需要,否则删除空的<script>块。

5)除非您需要,否则请删除OnSelecting="Database_Selecting"

6)将<asp:Button> onclick()更改为onclick="ButtonSearch_Click"并在后面的代码中实现ButtonSearch_Click事件处理程序以重新发布该页面。如果您不需要执行任何操作,除了使用键入的客户ID加载网格外,您可能会将事件处理程序留空。