在ASP.NET中,数据库连接类通常用于封装与数据库的交互逻辑,例如执行查询、插入、更新和删除操作。通过封装数据库操作,可以提高代码的可维护性和复用性。以下是一个完整的ASP.NET数据库连接类的示例,使用ADO.NET与SQL Server数据库进行交互。


1. 创建数据库连接类

以下是一个通用的数据库连接类,封装了常见的数据库操作。

using System;
using System.Data;
using System.Data.SqlClient;

public class DatabaseHelper
{
    private string connectionString;

    // 构造函数,接收连接字符串
    public DatabaseHelper(string connectionString)
    {
        this.connectionString = connectionString;
    }

    // 执行查询,返回DataTable
    public DataTable ExecuteQuery(string query, SqlParameter[] parameters = null)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            using (SqlCommand command = new SqlCommand(query, connection))
            {
                if (parameters != null)
                {
                    command.Parameters.AddRange(parameters);
                }

                connection.Open();
                SqlDataAdapter adapter = new SqlDataAdapter(command);
                DataTable dataTable = new DataTable();
                adapter.Fill(dataTable);
                return dataTable;
            }
        }
    }

    // 执行非查询操作(插入、更新、删除),返回受影响的行数
    public int ExecuteNonQuery(string query, SqlParameter[] parameters = null)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            using (SqlCommand command = new SqlCommand(query, connection))
            {
                if (parameters != null)
                {
                    command.Parameters.AddRange(parameters);
                }

                connection.Open();
                return command.ExecuteNonQuery();
            }
        }
    }

    // 执行标量查询,返回单个值
    public object ExecuteScalar(string query, SqlParameter[] parameters = null)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            using (SqlCommand command = new SqlCommand(query, connection))
            {
                if (parameters != null)
                {
                    command.Parameters.AddRange(parameters);
                }

                connection.Open();
                return command.ExecuteScalar();
            }
        }
    }
}

2. 配置数据库连接字符串

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

<configuration>
  <connectionStrings>
    <add name="MyConnectionString" connectionString="Server=.;Database=MyDB;Integrated Security=True;" providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

3. 在ASP.NET页面中使用数据库连接类

以下示例展示了如何在ASP.NET页面中使用DatabaseHelper类执行数据库操作。

HTML部分 (Default.aspx):

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

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>数据库操作示例</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:Button ID="btnQuery" runat="server" Text="查询数据" OnClick="btnQuery_Click" />
            <asp:Button ID="btnInsert" runat="server" Text="插入数据" OnClick="btnInsert_Click" />
            <asp:Button ID="btnUpdate" runat="server" Text="更新数据" OnClick="btnUpdate_Click" />
            <asp:Button ID="btnDelete" runat="server" Text="删除数据" OnClick="btnDelete_Click" />
            <br />
            <asp:GridView ID="GridView1" runat="server"></asp:GridView>
            <br />
            <asp:Label ID="lblResult" runat="server" Text=""></asp:Label>
        </div>
    </form>
</body>
</html>

代码部分 (Default.aspx.cs):

using System;
using System.Data;
using System.Web.Configuration;

namespace WebApplication1
{
    public partial class Default : System.Web.UI.Page
    {
        private DatabaseHelper dbHelper;

        protected void Page_Load(object sender, EventArgs e)
        {
            // 从Web.config中获取连接字符串
            string connectionString = WebConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
            dbHelper = new DatabaseHelper(connectionString);
        }

        protected void btnQuery_Click(object sender, EventArgs e)
        {
            // 查询数据
            string query = "SELECT * FROM Users";
            DataTable dataTable = dbHelper.ExecuteQuery(query);

            // 绑定到GridView
            GridView1.DataSource = dataTable;
            GridView1.DataBind();

            lblResult.Text = "查询成功,显示数据。";
        }

        protected void btnInsert_Click(object sender, EventArgs e)
        {
            // 插入数据
            string query = "INSERT INTO Users (UserName, Email) VALUES (@UserName, @Email)";
            SqlParameter[] parameters = {
                new SqlParameter("@UserName", "JohnDoe"),
                new SqlParameter("@Email", "johndoe@example.com")
            };

            int rowsAffected = dbHelper.ExecuteNonQuery(query, parameters);
            lblResult.Text = $"插入成功,受影响的行数: {rowsAffected}";
        }

        protected void btnUpdate_Click(object sender, EventArgs e)
        {
            // 更新数据
            string query = "UPDATE Users SET Email = @Email WHERE UserName = @UserName";
            SqlParameter[] parameters = {
                new SqlParameter("@Email", "john.doe@example.com"),
                new SqlParameter("@UserName", "JohnDoe")
            };

            int rowsAffected = dbHelper.ExecuteNonQuery(query, parameters);
            lblResult.Text = $"更新成功,受影响的行数: {rowsAffected}";
        }

        protected void btnDelete_Click(object sender, EventArgs e)
        {
            // 删除数据
            string query = "DELETE FROM Users WHERE UserName = @UserName";
            SqlParameter[] parameters = {
                new SqlParameter("@UserName", "JohnDoe")
            };

            int rowsAffected = dbHelper.ExecuteNonQuery(query, parameters);
            lblResult.Text = $"删除成功,受影响的行数: {rowsAffected}";
        }
    }
}

4. 运行示例

  1. 确保数据库中存在Users表,表结构如下:

CREATE TABLE Users (
    UserID INT PRIMARY KEY IDENTITY(1,1),
    UserName NVARCHAR(50),
    Email NVARCHAR(100)
);
  1. 运行项目并访问Default.aspx页面。

  2. 点击按钮执行查询、插入、更新和删除操作,观察结果。


5. 扩展功能

  • 事务支持:可以在DatabaseHelper类中添加事务支持,确保多个操作的原子性。

  • 异步操作:使用ExecuteNonQueryAsyncExecuteReaderAsync等方法实现异步数据库操作。

  • 连接池:通过配置连接字符串启用连接池,提高性能。


通过封装数据库连接类,可以将数据库操作逻辑集中管理,提高代码的可维护性和复用性。在实际开发中,可以根据需求扩展类的功能,例如支持事务、异步操作等。

Logo

一站式 AI 云服务平台

更多推荐