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

如何用C高效实现数据库表格数据的连接与操作?

C#通过ADO.NET或Entity Framework连接数据库,使用SqlConnection对象配置连接字符串,建立与SQL Server等数据库的通信,执行SQL命令或LINQ操作,实现数据查询、更新及事务管理,适用于桌面、Web应用的高效数据交互。

C#连接数据库操作指南

在软件开发领域,数据库连接是核心技能之一,本文将通过具体代码示例,详解如何用C#连接常见数据库(如SQL Server、MySQL、SQLite等),并说明如何安全高效地操作数据,以下内容基于官方文档和行业最佳实践整理,确保技术准确性与实用性。


C#连接数据库的基础原理

C#通过ADO.NET技术实现与数据库的交互,其核心组件包括:

  • Connection:建立与数据库的连接通道
  • Command:执行SQL语句或存储过程
  • DataReader:读取查询结果
  • DataAdapter:填充数据集(DataSet)

常用NuGet包:

  • System.Data.SqlClient(SQL Server)
  • MySql.Data(MySQL)
  • System.Data.SQLite(SQLite)

连接不同数据库的代码实现

连接SQL Server

using System.Data.SqlClient;
string connectionString = "Server=服务器地址;Database=数据库名;User Id=用户名;Password=密码;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    // 执行查询或操作
    string sql = "SELECT * FROM Users";
    using (SqlCommand command = new SqlCommand(sql, connection))
    {
        using (SqlDataReader reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                Console.WriteLine(reader["UserName"]);
            }
        }
    }
}

连接MySQL

using MySql.Data.MySqlClient;
string connectionString = "Server=服务器地址;Database=数据库名;Uid=用户名;Pwd=密码;";
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
    connection.Open();
    // 参数化查询示例
    string sql = "INSERT INTO Products (Name, Price) VALUES (@name, @price)";
    using (MySqlCommand cmd = new MySqlCommand(sql, connection))
    {
        cmd.Parameters.AddWithValue("@name", "笔记本电脑");
        cmd.Parameters.AddWithValue("@price", 5999);
        cmd.ExecuteNonQuery();
    }
}

连接SQLite

using System.Data.SQLite;
string dbPath = "Data Source=./mydatabase.db;Version=3;";
using (SQLiteConnection connection = new SQLiteConnection(dbPath))
{
    connection.Open();
    // 创建表示例
    string createTableSql = @"CREATE TABLE IF NOT EXISTS Logs (
                                Id INTEGER PRIMARY KEY AUTOINCREMENT,
                                Message TEXT NOT NULL,
                                CreatedAt DATETIME DEFAULT CURRENT_TIMESTAMP)";
    using (SQLiteCommand cmd = new SQLiteCommand(createTableSql, connection))
    {
        cmd.ExecuteNonQuery();
    }
}

数据库操作的四大核心功能

  1. 数据查询(SELECT)

    using (var command = connection.CreateCommand())
    {
     command.CommandText = "SELECT * FROM Orders WHERE Total > @minAmount";
     command.Parameters.AddWithValue("@minAmount", 1000);
     // 使用DataTable接收结果
     using (SqlDataAdapter adapter = new SqlDataAdapter(command))
     {
         DataTable dt = new DataTable();
         adapter.Fill(dt);
     }
    }
  2. 数据插入(INSERT)

    string insertSql = "INSERT INTO Employees (Name, Department) VALUES (@name, @dept)";
    using (var cmd = new SqlCommand(insertSql, connection))
    {
     cmd.Parameters.AddWithValue("@name", "张三");
     cmd.Parameters.AddWithValue("@dept", "技术部");
     int affectedRows = cmd.ExecuteNonQuery();
    }
  3. 数据更新(UPDATE)

    string updateSql = "UPDATE Products SET Stock=Stock-1 WHERE Id=@productId";
    using (var cmd = new SqlCommand(updateSql, connection))
    {
     cmd.Parameters.AddWithValue("@productId", 101);
     cmd.ExecuteNonQuery();
    }
  4. 数据删除(DELETE)

    string deleteSql = "DELETE FROM TempData WHERE ExpireDate < @currentDate";
    using (var cmd = new SqlCommand(deleteSql, connection))
    {
     cmd.Parameters.AddWithValue("@currentDate", DateTime.Now);
     cmd.ExecuteNonQuery();
    }

安全与性能优化建议

  1. 防范SQL注入

    • 始终使用参数化查询
    • 避免拼接SQL字符串
    • 对用户输入进行严格验证
  2. 资源管理

    • 使用using语句自动释放连接
    • 配置连接池(Connection Pooling)
    • 设置合理的连接超时时间
  3. 异常处理

    try
    {
     // 数据库操作代码
    }
    catch (SqlException ex)
    {
     Console.WriteLine($"数据库错误: {ex.Number} - {ex.Message}");
    }
    catch (Exception ex)
    {
     Console.WriteLine($"系统异常: {ex.Message}");
    }

常见问题解答

Q:连接字符串应该怎么保护?
A:建议将连接字符串存储在appsettings.json或环境变量中,不要硬编码在代码里。

Q:如何处理大并发下的数据库连接?
A:启用ADO.NET自带的连接池(默认开启),通过配置Max Pool Size调整最大连接数。

Q:EF Core和ADO.NET如何选择?
A:简单查询用EF Core提高效率,复杂操作或高性能场景建议直接用ADO.NET。


引用说明
本文技术要点参考自:

  • 微软官方ADO.NET文档
  • MySQL Connector/NET开发者指南
  • 《C#数据库编程实战》清华大学出版社
  • OWASP SQL注入防御指南
0