提示信息

C#进阶:基于ADO.NET框架的DBHelper工具类实现

血色玫瑰 已关注

在C#中,使用ADO.NET可以方便地进行数据库操作。为了简化数据库操作流程,我们可以创建一个DBHelper工具类。这个工具类通常包括执行SQL查询、插入、更新、删除操作,以及事务管理等功能。下面是一个简单的基于ADO.NET的DBHelper工具类示例:

  1. using System;
  2. using System.Data;
  3. using System.Data.SqlClient;
  4. public class DBHelper
  5. {
  6. private readonly string _connectionString;
  7. public DBHelper(string connectionString)
  8. {
  9. _connectionString = connectionString;
  10. }
  11. // Method to execute a query and return a DataTable
  12. public DataTable ExecuteQuery(string query, SqlParameter[] parameters = null)
  13. {
  14. using (SqlConnection conn = new SqlConnection(_connectionString))
  15. {
  16. using (SqlCommand cmd = new SqlCommand(query, conn))
  17. {
  18. if (parameters != null)
  19. {
  20. cmd.Parameters.AddRange(parameters);
  21. }
  22. using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
  23. {
  24. DataTable dataTable = new DataTable();
  25. adapter.Fill(dataTable);
  26. return dataTable;
  27. }
  28. }
  29. }
  30. }
  31. // Method to execute a non-query command (e.g. insert, update, delete)
  32. public int ExecuteNonQuery(string commandText, SqlParameter[] parameters = null)
  33. {
  34. using (SqlConnection conn = new SqlConnection(_connectionString))
  35. {
  36. conn.Open();
  37. using (SqlCommand cmd = new SqlCommand(commandText, conn))
  38. {
  39. if (parameters != null)
  40. {
  41. cmd.Parameters.AddRange(parameters);
  42. }
  43. return cmd.ExecuteNonQuery();
  44. }
  45. }
  46. }
  47. // Method to execute a scalar command
  48. public object ExecuteScalar(string commandText, SqlParameter[] parameters = null)
  49. {
  50. using (SqlConnection conn = new SqlConnection(_connectionString))
  51. {
  52. conn.Open();
  53. using (SqlCommand cmd = new SqlCommand(commandText, conn))
  54. {
  55. if (parameters != null)
  56. {
  57. cmd.Parameters.AddRange(parameters);
  58. }
  59. return cmd.ExecuteScalar();
  60. }
  61. }
  62. }
  63. // Method for executing commands within a transaction
  64. public void ExecuteTransaction(Action<SqlCommand> executeCommands)
  65. {
  66. using (SqlConnection conn = new SqlConnection(_connectionString))
  67. {
  68. conn.Open();
  69. using (SqlTransaction transaction = conn.BeginTransaction())
  70. {
  71. using (SqlCommand cmd = conn.CreateCommand())
  72. {
  73. cmd.Transaction = transaction;
  74. try
  75. {
  76. executeCommands(cmd);
  77. transaction.Commit();
  78. }
  79. catch
  80. {
  81. transaction.Rollback();
  82. throw;
  83. }
  84. }
  85. }
  86. }
  87. }
  88. }

使用说明:

  1. 初始化DBHelper:
    创建DBHelper对象时需要提供数据库连接字符串。

    1. var dbHelper = new DBHelper("your_connection_string_here");
  2. 执行查询:
    使用ExecuteQuery方法执行查询,并返回DataTable

    1. string query = "SELECT * FROM Users WHERE Age > @Age";
    2. var parameters = new[] { new SqlParameter("@Age", 18) };
    3. DataTable usersTable = dbHelper.ExecuteQuery(query, parameters);
  3. 执行非查询命令:
    使用ExecuteNonQuery方法执行插入、更新、删除操作。

    1. string insertCommand = "INSERT INTO Users (Name, Age) VALUES (@Name, @Age)";
    2. var parameters = new[]
    3. {
    4. new SqlParameter("@Name", "John Doe"),
    5. new SqlParameter("@Age", 30)
    6. };
    7. int rowsAffected = dbHelper.ExecuteNonQuery(insertCommand, parameters);
  4. 执行标量命令:
    使用ExecuteScalar方法获取单个结果值。

    1. string scalarCommand = "SELECT COUNT(*) FROM Users";
    2. int userCount = (int)dbHelper.ExecuteScalar(scalarCommand);
  5. 事务管理:
    使用ExecuteTransaction方法实现事务操作。

    1. dbHelper.ExecuteTransaction((cmd) =>
    2. {
    3. cmd.CommandText = "INSERT INTO Users (Name, Age) VALUES (@Name1, @Age1)";
    4. cmd.Parameters.AddWithValue("@Name1", "Alice");
    5. cmd.Parameters.AddWithValue("@Age1", 25);
    6. cmd.ExecuteNonQuery();
    7. cmd.CommandText = "INSERT INTO Users (Name, Age) VALUES (@Name2, @Age2)";
    8. cmd.Parameters.Clear();
    9. cmd.Parameters.AddWithValue("@Name2", "Bob");
    10. cmd.Parameters.AddWithValue("@Age2", 28);
    11. cmd.ExecuteNonQuery();
    12. });

这只是一个基本的DBHelper实现,可以根据具体需求进行扩展,比如添加日志记录、连接池管理、参数化SQL,或处理不同的数据库类型。

    遇到难题? "AI大模型GPT4.0、GPT" 是你的私人解答专家! 点击按钮去提问......
血色玫瑰 关注 已关注

最近一次登录:2024-11-20 00:43:35   

暂时还没有签名,请关注我或评论我的文章
×
免费图表工具,画流程图、架构图