当前位置:首页 > 技术教程 > 正文

asp.net如何调用存储过程?SQL教程详解步骤方法

在 ASP.NET 中调用 SQL Server 存储过程可以通过 ADO.NET 实现,以下是详细步骤和示例代码:

asp.net如何调用存储过程?SQL教程详解步骤方法 第1张

步骤 1:创建存储过程(SQL Server 示例)

CREATE PROCEDURE GetEmployeeByID @EmployeeID INT AS BEGIN SELECT * FROM Employees WHERE EmployeeID = @EmployeeID END

步骤 2:ASP.NET C# 调用代码(使用 ADO.NET)

示例 1:基础版(带参数)

using System.Data; using System.Data.SqlClient; public Employee GetEmployee(int employeeId) { Employee emp = null; // 从配置获取连接字符串(推荐在 Web.config 中配置) string connString = ConfigurationManager.ConnectionStrings["YourDbConnection"].ConnectionString; using (SqlConnection conn = new SqlConnection(connString)) { using (SqlCommand cmd = new SqlCommand("GetEmployeeByID", conn)) { cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@EmployeeID", employeeId); conn.Open(); using (SqlDataReader reader = cmd.ExecuteReader()) { if (reader.Read()) { emp = new Employee { ID = (int)reader["EmployeeID"], Name = reader["Name"].ToString(), Department = reader["Department"].ToString() }; } } } } return emp; }

示例 2:带输出参数

public int CreateEmployee(Employee emp) { int newID = -1; string connString = ConfigurationManager.ConnectionStrings["YourDbConnection"].ConnectionString; using (SqlConnection conn = new SqlConnection(connString)) { using (SqlCommand cmd = new SqlCommand("sp_CreateEmployee", conn)) { cmd.CommandType = CommandType.StoredProcedure; // 输入参数 cmd.Parameters.AddWithValue("@Name", emp.Name); cmd.Parameters.AddWithValue("@Department", emp.Department); // 输出参数 SqlParameter outParam = new SqlParameter("@NewID", SqlDbType.Int); outParam.Direction = ParameterDirection.Output; cmd.Parameters.Add(outParam); conn.Open(); cmd.ExecuteNonQuery(); // 获取输出参数值 newID = (int)cmd.Parameters["@NewID"].Value; } } return newID; }

配置 Web.config

<connectionStrings> <add name="YourDbConnection" connectionString="Server=your_server;Database=your_db;User Id=user;Password=pass;" providerName="System.Data.SqlClient"/> </connectionStrings>

关键点说明:

  1. 参数化查询:始终使用 Parameters.AddWithValue() 防止 SQL 载入
  2. 资源释放:使用 using 语句确保连接和命令对象自动释放
  3. 参数类型
    • 输入参数:AddWithValue("@Param", value)
    • 输出参数:设置 Direction = ParameterDirection.Output
    • 返回值:使用 ParameterDirection.ReturnValue
  4. 执行方法
    • ExecuteReader():返回结果集(SELECT)
    • ExecuteNonQuery():执行操作不返回数据(INSERT/UPDATE/DELETE)
    • ExecuteScalar():返回单个值

处理事务

using (SqlTransaction transaction = conn.BeginTransaction()) { try { cmd.Transaction = transaction; // 执行多个操作... transaction.Commit(); } catch { transaction.Rollback(); throw; } }

异步版本(ASP.NET 4.5+)

public async Task<Employee> GetEmployeeAsync(int id) { using (SqlConnection conn = new SqlConnection(connString)) { SqlCommand cmd = new SqlCommand("GetEmployeeByID", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@EmployeeID", id); await conn.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { // 处理数据... } } }

最佳实践:

  1. 将连接字符串存储在配置文件中
  2. 使用参数化查询防止 SQL 载入
  3. 通过 using 确保资源释放
  4. 重要操作添加事务支持
  5. 对高并发场景使用异步方法
  6. 验证存储过程返回值和错误代码

注意:实际项目中建议使用 Entity Framework 或 Dapper 等 ORM 工具简化存储过程调用,但原生 ADO.NET 在性能关键场景仍有优势。

asp.net如何调用存储过程?SQL教程详解步骤方法 第2张

asp.net如何调用存储过程?SQL教程详解步骤方法 第3张

0