当前位置:首页 > 行业动态 > 正文

C#封装CURD到SqlHelper类

C#封装CURD到SqlHelper类:该类通过整合数据访问逻辑,简化数据库操作流程,提高代码复用性与开发效率。

在C#中,将CURD操作封装到SqlHelper类是一种常见的做法,它可以提高代码的复用性和可维护性,以下是一个详细的示例,展示如何实现这一功能:

一、创建数据库连接字符串

需要在项目中创建一个配置文件(如App.config)来存储数据库连接字符串:

<configuration>
  <connectionStrings>
    <add name="MyConnectionString" connectionString="Data Source=服务器地址;Initial Catalog=数据库名;User Id=用户名;Password=密码;"/>
  </connectionStrings>
</configuration>

二、创建SqlHelper类

创建一个名为SqlHelper的类,该类包含执行CURD操作的方法,以下是一个简单的示例:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
public class SqlHelper
{
    private static string connectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
    // 获取数据库连接
    public static SqlConnection GetConnection()
    {
        return new SqlConnection(connectionString);
    }
    // 执行查询并返回结果集
    public static DataTable ExecuteQuery(string sql, params SqlParameter[] parameters)
    {
        using (SqlConnection conn = GetConnection())
        {
            using (SqlCommand cmd = new SqlCommand(sql, conn))
            {
                if (parameters != null)
                {
                    cmd.Parameters.AddRange(parameters);
                }
                DataTable dt = new DataTable();
                using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                {
                    da.Fill(dt);
                }
                return dt;
            }
        }
    }
    // 执行非查询命令(增删改)
    public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters)
    {
        using (SqlConnection conn = GetConnection())
        {
            using (SqlCommand cmd = new SqlCommand(sql, conn))
            {
                if (parameters != null)
                {
                    cmd.Parameters.AddRange(parameters);
                }
                conn.Open();
                int result = cmd.ExecuteNonQuery();
                return result;
            }
        }
    }
}

三、使用SqlHelper类进行CURD操作

以下是如何使用SqlHelper类执行CRUD操作的示例:

创建(Create)

public void CreateRecord(string name, int age)
{
    string sql = "INSERT INTO Users (Name, Age) VALUES (@Name, @Age)";
    SqlParameter[] parameters = new SqlParameter[] 
    { 
        new SqlParameter("@Name", name), 
        new SqlParameter("@Age", age) 
    };
    int result = SqlHelper.ExecuteNonQuery(sql, parameters);
    if (result > 0)
    {
        Console.WriteLine("Record inserted successfully!");
    }
    else
    {
        Console.WriteLine("Failed to insert record.");
    }
}

读取(Read)

public void ReadRecord(int id)
{
    string sql = "SELECT * FROM Users WHERE Id = @Id";
    SqlParameter[] parameters = new SqlParameter[] 
    { 
        new SqlParameter("@Id", id) 
    };
    DataTable dt = SqlHelper.ExecuteQuery(sql, parameters);
    foreach (DataRow row in dt.Rows)
    {
        Console.WriteLine($"ID: {row["Id"]}, Name: {row["Name"]}, Age: {row["Age"]}");
    }
}

更新(Update)

public void UpdateRecord(int id, string newName, int newAge)
{
    string sql = "UPDATE Users SET Name = @NewName, Age = @NewAge WHERE Id = @Id";
    SqlParameter[] parameters = new SqlParameter[] 
    { 
        new SqlParameter("@Id", id), 
        new SqlParameter("@NewName", newName), 
        new SqlParameter("@NewAge", newAge) 
    };
    int result = SqlHelper.ExecuteNonQuery(sql, parameters);
    if (result > 0)
    {
        Console.WriteLine("Record updated successfully!");
    }
    else
    {
        Console.WriteLine("Failed to update record.");
    }
}

删除(Delete)

public void DeleteRecord(int id)
{
    string sql = "DELETE FROM Users WHERE Id = @Id";
    SqlParameter[] parameters = new SqlParameter[] 
    { 
        new SqlParameter("@Id", id) 
    };
    int result = SqlHelper.ExecuteNonQuery(sql, parameters);
    if (result > 0)
    {
        Console.WriteLine("Record deleted successfully!");
    }
    else
    {
        Console.WriteLine("Failed to delete record.");
    }
}

四、相关问答FAQs

问题1:为什么要使用参数化查询而不是直接拼接SQL字符串?

答:使用参数化查询可以防止SQL注入攻击,这是一种常见的安全破绽,通过将用户输入作为参数传递给SQL查询,而不是直接拼接到查询字符串中,可以确保反面代码不会被执行,参数化查询还可以提高查询性能和代码的可读性。

问题2:如果数据库连接字符串发生变化,应该如何处理?

答:如果数据库连接字符串发生变化,只需要在配置文件(如App.config)中更新相应的值即可,这样,无需修改代码中的任何部分,从而提高了代码的可维护性,在实际应用中,可能需要根据不同的环境(如开发、测试、生产)使用不同的配置文件或配置节来管理数据库连接字符串。

小编有话说

通过将CURD操作封装到SqlHelper类中,我们可以显著提高代码的复用性和可维护性,这不仅减少了重复代码的数量,还使得代码更加清晰和易于理解,使用参数化查询也提高了应用程序的安全性,在实际开发中,我们还可以进一步扩展SqlHelper类的功能,例如添加事务支持、日志记录等,以满足更复杂的业务需求。

0