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

C数据库操作如何高效实现增删改查?最佳实践与解决方案分享

C#数据库增删改查程序基于ADO.NET框架实现,通过SqlConnection建立数据库连接,使用SqlCommand执行SQL语句或存储过程,封装了数据查询、插入、更新和删除操作,利用参数化查询防止SQL注入,采用try-catch异常处理机制保障数据安全,适用于WinForm或ASP.NET等应用开发场景。

在C#中实现数据库的增删改查(CRUD)操作是开发Web应用的核心技能之一,本文将以SQL Server数据库为例,结合参数化查询、异常处理和安全规范,提供可直接部署到生产环境的代码示例。

环境准备

安装NuGet包
通过Visual Studio安装以下组件:

  • System.Data.SqlClient
  • Dapper(可选ORM工具)
  1. 配置连接字符串
    在Web.config中配置:

    <configuration>
    <connectionStrings>
     <add name="DBConn" 
          connectionString="Server=.;Database=DemoDB;User Id=sa;Password=YourPassword;"
          providerName="System.Data.SqlClient"/>
    </connectionStrings>
    </configuration>

数据库连接类

using System.Data.SqlClient;
using System.Configuration;
public class DbHelper
{
    private static readonly string connString = 
        ConfigurationManager.ConnectionStrings["DBConn"].ConnectionString;
    public static SqlConnection GetConnection()
    {
        return new SqlConnection(connString);
    }
}

增删改查实现

  1. 创建数据(Create)

    public int CreateUser(User user)
    {
     const string sql = @"
         INSERT INTO Users (Name, Email, CreateDate)
         VALUES (@Name, @Email, @CreateDate)";
     using (var conn = DbHelper.GetConnection())
     {
         conn.Open();
         using (var cmd = new SqlCommand(sql, conn))
         {
             cmd.Parameters.AddWithValue("@Name", user.Name);
             cmd.Parameters.AddWithValue("@Email", user.Email);
             cmd.Parameters.AddWithValue("@CreateDate", DateTime.Now);
             return cmd.ExecuteNonQuery();
         }
     }
    }
  2. 查询数据(Read)

    public List<User> GetUsers()
    {
     var users = new List<User>();
     const string sql = "SELECT UserId, Name, Email FROM Users";
     using (var conn = DbHelper.GetConnection())
     {
         conn.Open();
         using (var cmd = new SqlCommand(sql, conn))
         {
             var reader = cmd.ExecuteReader();
             while (reader.Read())
             {
                 users.Add(new User
                 {
                     UserId = (int)reader["UserId"],
                     Name = reader["Name"].ToString(),
                     Email = reader["Email"].ToString()
                 });
             }
         }
     }
     return users;
    }
  3. 更新数据(Update)

    public int UpdateUser(User user)
    {
     const string sql = @"
         UPDATE Users 
         SET Name = @Name, Email = @Email
         WHERE UserId = @UserId";
     using (var conn = DbHelper.GetConnection())
     {
         conn.Open();
         using (var cmd = new SqlCommand(sql, conn))
         {
             cmd.Parameters.AddWithValue("@UserId", user.UserId);
             cmd.Parameters.AddWithValue("@Name", user.Name);
             cmd.Parameters.AddWithValue("@Email", user.Email);
             return cmd.ExecuteNonQuery();
         }
     }
    }
  4. 删除数据(Delete)

    public int DeleteUser(int userId)
    {
     const string sql = "DELETE FROM Users WHERE UserId = @UserId";
     using (var conn = DbHelper.GetConnection())
     {
         conn.Open();
         using (var cmd = new SqlCommand(sql, conn))
         {
             cmd.Parameters.AddWithValue("@UserId", userId);
             return cmd.ExecuteNonQuery();
         }
     }
    }

进阶实践

  1. 事务处理

    public void TransactionDemo()
    {
     using (var conn = DbHelper.GetConnection())
     {
         conn.Open();
         using (var transaction = conn.BeginTransaction())
         {
             try
             {
                 // 执行多个操作
                 transaction.Commit();
             }
             catch
             {
                 transaction.Rollback();
                 throw;
             }
         }
     }
    }
  2. 异常处理规范

    try
    {
     // 数据库操作
    }
    catch (SqlException ex) when (ex.Number == 547)
    {
     // 处理外键约束错误
    }
    catch (SqlException ex)
    {
     // 记录日志
     Logger.Error($"数据库错误:{ex.Message}");
     throw new CustomDbException("数据操作失败,请稍后重试");
    }

安全建议

  1. 始终使用参数化查询
  2. 最小化数据库账号权限
  3. 敏感数据加密存储
  4. 定期备份数据库
  5. 使用存储过程替代动态SQL

性能优化

  1. 连接池配置
  2. 索引优化
  3. 分页查询实现
  4. 异步操作支持
  5. 缓存常用查询结果

参考文献:

  1. Microsoft ADO.NET官方文档:https://learn.microsoft.com/zh-cn/dotnet/framework/data/adonet/
  2. OWASP SQL注入防护指南:https://owasp.org/www-community/attacks/SQL_Injection
  3. Stack Overflow 2025开发者调查报告数据库部分
0