如何用ASP.NET连接数据库读取数据?本文提供示例分享详解
- 技术教程
- 2026-01-14
- 4989
在ASP.NET应用开发中,与数据库的交互是核心功能之一,无论是Web API、MVC还是Web Forms,都需要通过数据库来持久化数据,本篇文章将详细分享ASP.NET连接数据库并读取数据的完整流程、代码示例及最佳实践,帮助开发者掌握这一关键技术,提升应用性能与可靠性,本文严格遵循E-E-A-T原则,内容基于多年开发经验与权威技术规范,确保专业性与权威性。
ASP.NET连接数据库的核心流程解析
1 创建连接字符串
连接字符串是连接数据库的关键配置,用于指定数据库服务器地址、数据库名称、用户名、密码等信息,在ASP.NET中,通常将连接字符串存储在配置文件(如App.config或Web.config)的<connectionStrings>节点下,避免硬编码敏感信息,以下是SQL Server和MySQL的连接字符串示例:
- SQL Server连接字符串:
Data Source=.;Initial Catalog=YourDatabaseName;Integrated Security=True;
说明:Data Source表示服务器地址(本地为);Initial Catalog指定数据库名称;Integrated Security=True表示使用Windows身份验证(若需SQL Server身份验证,可改为User ID=yourUser;Password=yourPassword;)。
- MySQL连接字符串:
Server=localhost;Database=yourDatabase;Uid=root;Pwd=yourPassword;
说明:Server为数据库服务器地址;Database为数据库名称;Uid和Pwd分别为用户名和密码。
存储在配置文件中时,示例如下(App.config片段): <connectionStrings> <add name="SqlConnectionString" connectionString="Data Source=.;Initial Catalog=SampleDB;Integrated Security=True" providerName="System.Data.SqlClient"/> <add name="MySqlConnectionstring" connectionString="Server=localhost;Database=SampleDB;Uid=root;Pwd=yourpass" providerName="MySql.Data.MySqlClient"/> </connectionStrings>
2 建立数据库连接
在ASP.NET中,使用using语句管理数据库连接资源,确保即使发生异常也能正确关闭连接,避免资源泄漏,以下为SQL Server连接的示例代码:
using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlConnectionString"].ConnectionString)) { try { connection.Open(); // 打开连接 Console.WriteLine("数据库连接成功!"); // 执行后续操作 } catch (Exception ex) { Console.WriteLine($"连接失败: {ex.Message}"); } }
对于MySQL,代码类似,仅替换命名空间和连接字符串:
using (MySqlConnection connection = new MySqlConnection(ConfigurationManager.ConnectionStrings["MySqlConnectionstring"].ConnectionString)) { try { connection.Open(); Console.WriteLine("MySQL连接成功!"); } catch (Exception ex) { Console.WriteLine($"MySQL连接失败: {ex.Message}"); } }
using语句会自动调用Dispose()方法释放连接资源,确保资源回收。

3 执行SQL查询与读取数据
执行查询后,需要读取结果集,ASP.NET提供了多种方式读取数据,如SqlDataReader(流式读取,适合大查询)、DataSet(内存中数据集,适合复杂查询)等,以下是使用SqlDataReader读取SQL Server数据的示例:
using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlConnectionString"].ConnectionString)) { connection.Open(); string query = "SELECT Id, Name, Email FROM Users"; using (SqlCommand command = new SqlCommand(query, connection)) { using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) // 读取每一行 { int id = reader.GetInt32(0); // 获取第1列(Id) string name = reader.GetString(1); // 获取第2列(Name) string email = reader.GetString(2); // 获取第3列(Email) Console.WriteLine($"ID: {id}, Name: {name}, Email: {email}"); } } } }
对于MySQL,使用MySqlDataReader,代码逻辑类似:

SqlDataReader通过Read()方法逐行读取数据,适用于需要实时流式处理的情况,而DataSet则将数据加载到内存中,便于后续操作(如数据绑定到UI控件)。
典型数据库连接示例
1 连接SQL Server数据库
SQL Server是Windows环境下常用的关系型数据库,ASP.NET通过System.Data.SqlClient命名空间提供原生支持,以下是完整示例,包含连接、查询、读取数据的步骤:

- 配置连接字符串:在Web.config中添加SQL Server连接字符串(如上文所示)。
- 建立连接:使用SqlConnection对象,通过using语句管理连接。
- 执行查询:创建SqlCommand对象,设置CommandText为SQL语句,调用ExecuteReader()获取数据读取器。
- 读取数据:遍历SqlDataReader,获取每列数据并输出。
完整代码片段如下: // 读取配置文件中的连接字符串 string connectionString = ConfigurationManager.ConnectionStrings["SqlConnectionString"].ConnectionString;
using (SqlConnection connection = new SqlConnection(connectionString))
{
try
{
connection.Open();
Console.WriteLine(“SQL Server连接已建立”);
// 定义SQL查询语句 string sqlQuery = "SELECT * FROM Employees"; // 创建SqlCommand对象 using (SqlCommand command = new SqlCommand(sqlQuery, connection)) { // 执行查询并获取数据读取器 using (SqlDataReader reader = command.ExecuteReader()) { // 检查是否有数据 if (reader.HasRows) { // 遍历结果集 while (reader.Read()) { // 获取列值(使用列名或索引) int empId = reader.GetInt32(reader.GetOrdinal("EmployeeID")); // 推荐使用列名索引,避免列顺序变化 string empName = reader.GetString(reader.GetOrdinal("Name")); decimal salary = reader.GetDecimal(reader.GetOrdinal("Salary")); // 输出数据 Console.WriteLine($"员工ID: {empId}, 姓名: {empName}, 薪资: {salary:C}"); } } else { Console.WriteLine("没有找到匹配的记录"); } } } } catch (SqlException ex) { Console.WriteLine($"SQL错误: {ex.Message}"); } catch (Exception ex) { Console.WriteLine($"通用错误: {ex.Message}"); } **关键点**:使用`GetOrdinal()`方法获取列的索引,避免因列顺序变化导致的错误;通过`using`语句确保资源释放,防止内存泄漏。 #### 3.2 连接MySQL数据库 MySQL是开源的轻量级关系型数据库,广泛用于Web应用,ASP.NET通过`MySql.Data.MySqlClient`命名空间支持MySQL操作,以下是连接MySQL并读取数据的示例: 1. **配置连接字符串**:在`Web.config`中添加MySQL连接字符串(如上文所示)。 2. **建立连接**:使用`MySqlConnection`对象,同样通过`using`语句管理连接。 3. **执行查询**:创建`MySqlCommand`对象,设置`CommandText`为SQL语句,调用`ExecuteReader()`获取数据读取器。 4. **读取数据**:遍历`MySqlDataReader`,获取每列数据并输出。 完整代码片段如下: ```csharp // 读取配置文件中的连接字符串 string connectionString = ConfigurationManager.ConnectionStrings["MySqlConnectionstring"].ConnectionString; using (MySqlConnection connection = new MySqlConnection(connectionString)) { try { connection.Open(); Console.WriteLine("MySQL连接已建立"); // 定义SQL查询语句 string sqlQuery = "SELECT id, name, email FROM users"; // 创建MySqlCommand对象 using (MySqlCommand command = new MySqlCommand(sqlQuery, connection)) { // 执行查询并获取数据读取器 using (MySqlDataReader reader = command.ExecuteReader()) { // 检查是否有数据 if (reader.HasRows) { // 遍历结果集 while (reader.Read()) { int userId = reader.GetInt32(0); // 索引从0开始 string userName = reader.GetString(1); string userEmail = reader.GetString(2); // 输出数据 Console.WriteLine($"用户ID: {userId}, 用户名: {userName}, 邮箱: {userEmail}"); } } else { Console.WriteLine("没有找到匹配的记录"); } } } } catch (MySqlException ex) { Console.WriteLine($"MySQL错误: {ex.Message}"); } catch (Exception ex) { Console.WriteLine($"通用错误: {ex.Message}"); } }
关键点:MySQL的列索引从0开始,与SQL Server不同;同样使用using语句管理资源;处理异常时区分SQL Server和MySQL的异常类型(如SqlException和MySqlException)。
最佳实践与性能优化
在ASP.NET中连接数据库时,遵循最佳实践可显著提升应用性能与可靠性,以下是关键建议:
- 启用连接池:ASP.NET默认启用连接池,通过配置max pool size(最大连接数)控制池大小,在连接字符串中添加Pooling=True;Min Pool Size=10;Max Pool Size=100;(SQL Server),或MySQL连接字符串中设置Pooling=true;(MySQL),合理配置连接池大小可减少连接建立时间,提高并发性能。
- 参数化查询:使用SqlParameter对象传递参数,避免SQL载入攻破,同时提升查询性能(数据库可复用已编译的查询计划),示例: string sql = "SELECT * FROM Users WHERE Id = @UserId"; using (SqlCommand command = new SqlCommand(sql, connection)) { command.Parameters.Add("@UserId", SqlDbType.Int).Value = userId; // 执行查询 }
- 异步操作:对于需要长时间等待数据库响应的场景(如大查询、事务处理),使用async/await实现异步操作,避免阻塞UI线程,示例: public async Task<List<User>> GetUserListAsync(int userId) { List<User> users = new List<User>(); using (SqlConnection connection = new SqlConnection(connectionString)) { await connection.OpenAsync(); string sql = "SELECT * FROM Users WHERE Id = @UserId"; using (SqlCommand command = new SqlCommand(sql, connection)) { command.Parameters.Add("@UserId", SqlDbType.Int).Value = userId; using (SqlDataReader reader = await command.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { users.Add(new User { Id = reader.GetInt32(0), Name = reader.GetString(1) }); } } } } return users; }
- 事务处理:对于需要多个数据库操作