如何在ASP.NET中实现存储过程的调用?

在ASP.NET中调用存储过程是一个常见的数据库操作,通过存储过程可以提高应用程序的性能和安全性,本文将详细介绍如何在ASP.NET中使用C#语言调用存储过程,包括创建存储过程、连接数据库、执行存储过程以及处理返回结果的步骤。

如何在ASP.NET中实现存储过程的调用?

一、创建存储过程

存储过程是在数据库中以预编译的SQL语句***形式存储的过程,可以通过指定名称并传递参数来执行,以下是一个简单的存储过程示例,该存储过程从两个表中联合查询数据。

CREATE PROCEDURE wentabletest
AS
BEGIN
    DECLARE @sql NVARCHAR(MAX);
    SET @sql = N'SELECT aa.name, aa.age, bb.score FROM wentable1 aa INNER JOIN wentable2 bb ON aa.ID = bb.UID';
    EXEC sp_executesql @sql;
END
GO

二、ASP.NET中调用存储过程

在ASP.NET中调用存储过程通常涉及以下几个步骤:建立数据库连接、创建命令对象、设置命令类型、执行命令并处理结果,以下是一个详细的实例,展示如何在ASP.NET页面中调用上述存储过程并将结果显示在页面上。

1. 建立数据库连接

需要在Web.config文件中配置数据库连接字符串。

<configuration>
  <connectionStrings>
    <add name="wentestConnectionString" connectionString="Data Source=服务器地址;Initial Catalog=数据库名;User ID=用户名;Password=密码" providerName="System.Data.SqlClient"/>
  </connectionStrings>
</configuration>

2. 创建ASP.NET页面

新建一个空白的ASP.NET网页,并在页面中添加一个Label控件用于显示结果。

<%@ 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 runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:Label ID="ltb" runat="server" Text=""></asp:Label>
        </div>
    </form>
</body>
</html>

3. 在代码后台调用存储过程

Page_Load事件中编写代码,调用存储过程并将结果填充到DataTable中,然后将结果显示在页面上。

如何在ASP.NET中实现存储过程的调用?

using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            SqlConnection Mycon = new SqlConnection(ConfigurationManager.ConnectionStrings["wentestConnectionString"].ConnectionString.ToString());
            Mycon.Open();
            SqlCommand Mycom = new SqlCommand("wentabletest", Mycon);
            Mycom.CommandType = CommandType.StoredProcedure;
            Mycom.ExecuteNonQuery();
            SqlDataAdapter Myada = new SqlDataAdapter();
            Myada.SelectCommand = Mycom;
            DataTable dt = new DataTable();
            Myada.Fill(dt);
            string PageCode = "";
            if (dt.Rows.Count > 0)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    PageCode += "<br/><li>";
                    PageCode += "<div class='s_biao1'>" + dt.Rows[i]["name"].ToString() + "---" + dt.Rows[i]["age"].ToString() + "---" + dt.Rows[i]["score"].ToString() + "</div>";
                    PageCode += "</div>";
                    PageCode += "</li>";
                }
            }
            ltb.Text = PageCode;
        }
    }
}

三、带参数的存储过程

存储过程可以带有输入参数和输出参数,这使得存储过程更加灵活和强大,下面是一个带参数的存储过程示例,该存储过程根据起始日期和结束日期查询记录。

CREATE PROCEDURE dbo.AXzhz
    @startDate VARCHAR(16),
    @endDate VARCHAR(16)
AS
BEGIN
    SELECT id FROM table_AX WHERE commentDateTime >= @startDate AND commentDateTime <= @endDate ORDER BY contentownerid DESC
END
GO

1. 在ASP.NET中调用带参数的存储过程

在ASP.NET中调用带参数的存储过程时,需要为每个参数创建SqlParameter对象并将其添加到命令对象的参数***中。

public static string GetCustomerCNameCount(string startDate, string endDate, ref DataSet ds)
{
    SqlConnection con = ADConnection.createConnection(); // 假设ADConnection.createConnection()返回一个已打开的SqlConnection对象
    SqlDataAdapter da = new SqlDataAdapter("AXzhz", con);
    da.SelectCommand.CommandType = CommandType.StoredProcedure;
    da.SelectCommand.Parameters.Add(new SqlParameter("@startDate", SqlDbType.VarChar, 16)).Value = startDate;
    da.SelectCommand.Parameters.Add(new SqlParameter("@endDate", SqlDbType.VarChar, 16)).Value = endDate;
    try
    {
        da.Fill(ds);
        return "OK";
    }
    catch (Exception ex)
    {
        return ex.ToString();
    }
}

2. 验证SQL命令执行是否成功

可以通过返回值或输出参数来验证SQL命令的执行情况,以下是一个带有输出参数的存储过程示例,用于更新用户密码并返回执行状态。

CREATE PROCEDURE dbo.AXzhz
    @password NVARCHAR(20),
    @userName NVARCHAR(20)
AS
BEGIN
    DECLARE @err0 INT;
    UPDATE WL_user SET password = @password WHERE UserName = @userName;
    SET @err0 = @@ERROR;
    SELECT @err0 AS err0;
END
GO

在ASP.NET中调用该存储过程并获取返回值:

public static string UpdateUserPassword(string userName, string password)
{
    SqlConnection con = ADConnection.createConnection(); // 假设ADConnection.createConnection()返回一个已打开的SqlConnection对象
    SqlCommand cmd = new SqlCommand("AXzhz", con);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add(new SqlParameter("@password", SqlDbType.NVarChar, 20)).Value = password;
    cmd.Parameters.Add(new SqlParameter("@userName", SqlDbType.NVarChar, 20)).Value = userName;
    try
    {
        Int32 re = (Int32)cmd.ExecuteScalar();
        if (re == 0) return "OK";
        else return "Error";
    }
    catch (Exception ex)
    {
        return ex.ToString();
    }
}

存储过程是提高数据库操作性能和安全性的重要手段,在ASP.NET中调用存储过程主要包括以下几个步骤:创建存储过程、配置数据库连接字符串、在ASP.NET页面中建立数据库连接、创建命令对象并设置其类型为存储过程、执行命令并处理返回结果,对于带参数的存储过程,还需要创建相应的参数对象并添加到命令对象的参数***中,通过这些步骤,可以实现对数据库的高效访问和操作。

相关问题与解答:

如何在ASP.NET中实现存储过程的调用?

Q1: 为什么使用存储过程而不是直接在ASP.NET代码中写SQL语句?

A1: 使用存储过程有以下几个优点:存储过程在第一次执行后会在SQL Server的缓冲区中创建查询树,后续执行时无需重新编译,提高了执行速度;存储过程可以将业务逻辑封装在数据库层,增强了代码的可维护性和重用性;通过存储过程可以限制用户对数据库表的直接访问,提高了数据的安全性。

Q2: 如何在ASP.NET中处理存储过程返回的结果集?

A2: 在ASP.NET中处理存储过程返回的结果集通常使用SqlDataAdapterDataTable,创建一个SqlDataAdapter对象并将其SelectCommand属性设置为要执行的存储过程,设置命令对象的CommandTypeCommandType.StoredProcedure,执行Fill方法将结果填充到DataTable中,可以遍历DataTable中的行和列来处理返回的数据。

以上内容就是解答有关“asp.net 存储过程实例”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。