使用 VS 2019 在 ASP.NET Web 表单中的页面加载时调用存储过程

问题描述 投票:0回答:1

对此非常陌生。我已经基本完成了

.aspx
代码。我知道数据源连接信息,只是尝试在页面加载时运行并显示存储过程的输出。这将是一个报告,仅显示从列表中选择该项目和页面加载时的结果。对于尼安德雷特人对此的理解表示歉意......

我一直在研究

.aspx.cs
文件中页面加载时存储过程的调用。

asp.net stored-procedures webforms pageload
1个回答
0
投票

好的,一般步骤是:

首先,设置与 SQL Server 的连接。

因此,在项目文件夹中,您要创建一个连接。因此,这将导致您的连接只有一个位置,从而避免应用程序中各处出现多个连接。

由此产生的数据库连接可以反复使用。

所以,项目->属性。

然后选择设置选项卡。

因此,我们像这样创建数据库连接:

请注意,我“经常”使用“。” (点)作为服务器名称,这样您就不需要输入数据库服务器名称。

好的,现在我们有了有效的连接。

现在,这是我们的存储过程,它允许我们将城市名称传递给过程,以根据给定的城市参数返回酒店列表。

那么,这个存储过程:

CREATE PROCEDURE GetHotelsByCity 
    @City nvarchar(50)
AS
BEGIN
    SET NOCOUNT ON;
    SELECT * FROM tblHotelsA WHERE City = @City
    ORDER BY HotelName
END
GO

好的,现在我们的网页标记了。我们将使用 GridView 来显示结果。

        <asp:GridView ID="GridView1" runat="server"
            AutoGenerateColumns="False" DataKeyNames="ID"
            CssClass="table table-hover" Width="50%">
            <Columns>
                <asp:BoundField DataField="FirstName" HeaderText="FirstName"        />
                <asp:BoundField DataField="LastName" HeaderText="LastName"          />
                <asp:BoundField DataField="City" HeaderText="City"                  />
                <asp:BoundField DataField="HotelName" HeaderText="HotelName"        />
                <asp:BoundField DataField="Description" HeaderText="Description"    />
            </Columns>
        </asp:GridView>

所以,现在我们的代码在页面加载事件中。

请记住,对于页面上的任何和所有按钮单击,每次都会触发页面加载事件。因此,在几乎所有情况下,您都希望此类加载代码仅在真正的首页加载时运行。

因此,我们测试/检查内置的 IsPostBack 标志,并且仅在第一个实际页面加载时提取数据。

因此这段代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        DataTable dtHotels = new DataTable();
        using (SqlConnection con = new SqlConnection(Properties.Settings.Default.MyDB))
        {
            using (SqlCommand cmd = new SqlCommand("GetHotelsByCity", con))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@City", SqlDbType.NVarChar).Value = "Edmonton";
                con.Open();
                dtHotels.Load(cmd.ExecuteReader()); 
            }
        }
        GridView1.DataSource = dtHotels;
        GridView1.DataBind();
    }
}

结果是这样的:

© www.soinside.com 2019 - 2024. All rights reserved.