ASP.NET如何调用SQL存储过程? | ASP.NET数据库操作实战教程
- 技术教程
- 2026-02-07
- 4145
在 ASP.NET 中调用 SQL Server 存储过程是常见的数据库操作方式,以下是详细步骤和示例代码:

核心步骤
- 创建存储过程(SQL Server 端)
- 配置连接字符串(Web.config)
- 使用 ADO.NET 调用存储过程(C# 代码)
示例场景
假设存在存储过程 GetEmployeeDetails:
CREATE PROCEDURE GetEmployeeDetails @EmployeeID INT, @DepartmentName NVARCHAR(50) OUTPUT AS BEGIN SELECT Name, Position FROM Employees WHERE ID = @EmployeeID SELECT @DepartmentName = Department FROM EmployeeDetails WHERE EmployeeID = @EmployeeID END
实现代码 (C#)
配置连接字符串 (Web.config)
<connectionStrings> <add name="MyDB" connectionString="Server=.;Database=YourDB;Integrated Security=True;" providerName="System.Data.SqlClient"/> </connectionStrings>
C# 调用代码
using System; using System.Data; using System.Data.SqlClient; using System.Web.UI.WebControls; public partial class EmployeePage : System.Web.UI.Page { protected void GetEmployeeData(int employeeId) { // 从配置获取连接字符串 string connString = System.Configuration.ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString; using (SqlConnection conn = new SqlConnection(connString)) { // 创建命令对象并指定为存储过程 using (SqlCommand cmd = new SqlCommand("GetEmployeeDetails", conn)) { cmd.CommandType = CommandType.StoredProcedure; try { // 添加输入参数 cmd.Parameters.Add("@EmployeeID", SqlDbType.Int).Value = employeeId; // 添加输出参数 SqlParameter deptOutput = new SqlParameter("@DepartmentName", SqlDbType.NVarChar, 50); deptOutput.Direction = ParameterDirection.Output; cmd.Parameters.Add(deptOutput); conn.Open(); // 方案1:获取DataReader(读取结果集) using (SqlDataReader reader = cmd.ExecuteReader()) { if (reader.HasRows) { while (reader.Read()) { string name = reader["Name"].ToString(); string position = reader["Position"].ToString(); // 处理数据... } } } // 方案2:获取输出参数值(需先关闭DataReader) string department = deptOutput.Value.ToString(); // 方案3:无返回结果时(如增删改) // int rowsAffected = cmd.ExecuteNonQuery(); } catch (Exception ex) { // 错误处理 throw new Exception("数据库操作失败", ex); } } } } }
关键点说明
-
参数方向

- ParameterDirection.Input (默认)
- ParameterDirection.Output
- ParameterDirection.InputOutput
- ParameterDirection.ReturnValue
-
不同执行方式

- ExecuteReader():返回结果集(多行数据)
- ExecuteNonQuery():返回受影响行数(INSERT/UPDATE/DELETE)
- ExecuteScalar():返回单个值(如 COUNT(*))
-
参数类型匹配
- 必须与存储过程定义的 SQL 类型匹配(如 SqlDbType.Int 对应 SQL 的 INT)
- 使用 using 语句:自动释放连接和命令对象
- 参数化查询:防止 SQL 载入攻破
- 错误处理:用 try-catch 包裹数据库操作
- 连接字符串管理:集中存储在配置文件中
- 异步操作(可选):使用 ExecuteReaderAsync() 等异步方法提高并发能力
最佳实践
注意:实际使用时需替换数据库连接字符串、存储过程名称和参数名称,并根据业务需求处理返回结果。