C#封装CURD到SqlHelper类
- 行业动态
- 2025-02-04
- 1
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类的功能,例如添加事务支持、日志记录等,以满足更复杂的业务需求。
本站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本站,有问题联系侵删!
本文链接:https://www.xixizhuji.com/fuzhu/406268.html