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

如何用C高效连接并操作数据库表格数据?

C#通过ADO.NET组件连接数据库,使用SqlConnection建立链接,SqlCommand执行查询,DataAdapter填充DataSet或DataReader读取数据,需妥善处理连接开关,采用参数化查询防范注入风险,实现高效安全的数据库交互操作。

环境准备

  1. 安装必要工具

    • Visual Studio(推荐2022或更高版本)
    • SQL Server Management Studio (SSMS) 或本地数据库实例
    • NuGet包:System.Data.SqlClient
  2. 创建测试数据库
    使用SSMS执行以下SQL语句:

    CREATE DATABASE SampleDB;
    USE SampleDB;
    CREATE TABLE Users (
        UserID INT PRIMARY KEY IDENTITY,
        UserName NVARCHAR(50),
        Email NVARCHAR(100)
    );
    INSERT INTO Users (UserName, Email) VALUES ('张三', 'zhangsan@example.com');

建立数据库连接

配置连接字符串

appsettings.json中定义(ASP.NET Core项目):

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=localhost;Database=SampleDB;Integrated Security=True;TrustServerCertificate=True;"
  }
}

说明

  • Integrated Security=True 表示使用Windows身份验证
  • 若用SQL账号验证,格式为:User Id=用户名;Password=密码;

编写连接代码

using System.Data.SqlClient;
using Microsoft.Extensions.Configuration;
public class DatabaseService
{
    private readonly string _connectionString;
    public DatabaseService(IConfiguration configuration)
    {
        _connectionString = configuration.GetConnectionString("DefaultConnection");
    }
    public void ConnectAndQuery()
    {
        using (SqlConnection connection = new SqlConnection(_connectionString))
        {
            try
            {
                connection.Open();
                string query = "SELECT * FROM Users";
                SqlCommand command = new SqlCommand(query, connection);
                SqlDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Console.WriteLine($"ID: {reader["UserID"]}, 姓名: {reader["UserName"]}");
                }
                reader.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine($"错误: {ex.Message}");
            }
        }
    }
}

数据操作示例

插入数据(参数化查询)

public void AddUser(string userName, string email)
{
    using (SqlConnection connection = new SqlConnection(_connectionString))
    {
        string query = "INSERT INTO Users (UserName, Email) VALUES (@UserName, @Email)";
        SqlCommand command = new SqlCommand(query, connection);
        command.Parameters.AddWithValue("@UserName", userName);
        command.Parameters.AddWithValue("@Email", email);
        connection.Open();
        command.ExecuteNonQuery();
    }
}

更新数据

public void UpdateUserEmail(int userId, string newEmail)
{
    using (SqlConnection connection = new SqlConnection(_connectionString))
    {
        string query = "UPDATE Users SET Email = @Email WHERE UserID = @UserID";
        SqlCommand command = new SqlCommand(query, connection);
        command.Parameters.AddWithValue("@Email", newEmail);
        command.Parameters.AddWithValue("@UserID", userId);
        connection.Open();
        command.ExecuteNonQuery();
    }
}

安全与最佳实践

  1. 防范SQL注入

    • 始终使用参数化查询(如SqlParameter
    • 避免拼接SQL字符串
  2. 资源管理

    • 使用using语句确保连接和对象自动释放
    • 在Web应用中,考虑连接池优化
  3. 错误处理

    • 使用try-catch捕获SqlException
    • 记录日志以便排查问题:
      catch (SqlException sqlEx)
      {
        Logger.Error($"数据库错误代码 {sqlEx.Number}: {sqlEx.Message}");
      }

常见问题排查

问题现象 可能原因 解决方案
连接超时 网络不通/防火墙限制 检查端口1433是否开放
登录失败 身份验证模式配置错误 切换SQL Server身份验证模式
无法找到数据库 连接字符串名称拼写错误 检查appsettings.json配置

引用说明

  • Microsoft ADO.NET官方文档:https://learn.microsoft.com/zh-cn/dotnet/framework/data/adonet/
  • SQL Server连接字符串配置指南:https://www.connectionstrings.com/sql-server/

通过遵循上述步骤,您可以在C#项目中实现安全高效的数据库操作,建议定期备份数据,并在生产环境中使用ORM框架(如Entity Framework Core)提升开发效率。

0