上一篇
如何用C高效实现数据库连接?
- 行业动态
- 2025-05-11
- 1
在C#中连接数据库通常使用ADO.NET技术,通过SqlConnection对象配置连接字符串(包含服务器地址、数据库名、用户名及密码),使用Open()方法建立连接,配合SqlCommand执行SQL语句,最后需关闭连接释放资源,建议用using语句自动管理连接生命周期。
环境准备
- 安装数据库:根据需求安装SQL Server、MySQL或其他数据库系统,并确保服务正常运行。
- 配置数据库权限:创建专用数据库账号并分配最小必要权限(如仅允许查询或更新特定表)。
- 安装开发工具:使用Visual Studio或JetBrains Rider,安装对应数据库的NuGet包:
- SQL Server:
System.Data.SqlClient
(默认集成,无需额外安装)。 - MySQL:通过NuGet安装
MySql.Data
。 - SQLite:安装
System.Data.SQLite
。
- SQL Server:
配置连接字符串
连接字符串是连接数据库的核心,需包含服务器地址、数据库名称、认证信息等,以下为常见格式:
// SQL Server连接字符串 string sqlConnectionString = "Server=服务器地址;Database=数据库名;User Id=用户名;Password=密码;"; // MySQL连接字符串 string mySqlConnectionString = "Server=服务器地址;Database=数据库名;Uid=用户名;Pwd=密码;";
安全建议:
- 避免硬编码:将连接字符串存储在
appsettings.json
或Web.config
中,通过配置文件读取。 - 加密敏感信息:使用ASP.NET Core的Data Protection API或工具(如Azure Key Vault)加密。
编写数据库连接代码
示例1:连接SQL Server
using System.Data.SqlClient; public void ConnectToSqlServer() { string connectionString = "Server=localhost;Database=TestDB;User Id=sa;Password=123456;"; using (SqlConnection connection = new SqlConnection(connectionString)) { try { connection.Open(); Console.WriteLine("连接成功!"); // 执行查询或操作 } catch (SqlException ex) { Console.WriteLine($"错误:{ex.Message}"); } } }
示例2:连接MySQL
using MySql.Data.MySqlClient; public void ConnectToMySQL() { string connectionString = "Server=localhost;Database=TestDB;Uid=root;Pwd=123456;"; using (MySqlConnection connection = new MySqlConnection(connectionString)) { try { connection.Open(); Console.WriteLine("连接成功!"); // 执行查询或操作 } catch (MySqlException ex) { Console.WriteLine($"错误:{ex.Message}"); } } }
执行数据库操作
连接成功后,可通过SqlCommand
或MySqlCommand
执行SQL语句。
查询数据示例:
string query = "SELECT * FROM Users WHERE Age > @Age"; using (SqlCommand command = new SqlCommand(query, connection)) { command.Parameters.AddWithValue("@Age", 18); SqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { Console.WriteLine(reader["UserName"]); } }
插入数据示例:
string insertQuery = "INSERT INTO Users (UserName, Email) VALUES (@Name, @Email)"; using (SqlCommand command = new SqlCommand(insertQuery, connection)) { command.Parameters.AddWithValue("@Name", "John"); command.Parameters.AddWithValue("@Email", "john@example.com"); int rowsAffected = command.ExecuteNonQuery(); Console.WriteLine($"插入了{rowsAffected}行"); }
异常处理与资源释放
- 使用
try-catch-finally
:捕获SqlException
或MySqlException
,记录日志(如NLog或Serilog)。 - 释放资源:通过
using
语句自动释放连接对象,避免内存泄漏。 - 连接池优化:默认情况下,ADO.NET会启用连接池,无需手动关闭后重复创建。
安全性与性能优化
- 参数化查询:始终使用
Parameters.AddWithValue
防止SQL注入。 - 异步操作:在高并发场景下使用
async/await
(例如OpenAsync()
和ExecuteReaderAsync()
)。 - 连接超时设置:在连接字符串中添加
Connect Timeout=30
,避免长时间阻塞。
常见问题
- 连接失败:检查防火墙设置、数据库服务状态、账号权限。
- 性能瓶颈:避免频繁打开/关闭连接,复用连接池。
- 跨平台支持:使用.NET Core和
MySql.Data
可在Linux环境中运行。
引用说明
- SQL Server官方文档:Microsoft Docs – SqlConnection
- MySQL Connector/NET文档:MySQL Documentation
- OWASP SQL注入防护指南:OWASP SQL Injection