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

ASP.NET如何调用SQL存储过程? | ASP.NET数据库操作实战教程

在 ASP.NET 中调用 SQL Server 存储过程是常见的数据库操作方式,以下是详细步骤和示例代码:

ASP.NET如何调用SQL存储过程? | ASP.NET数据库操作实战教程 第1张

核心步骤

  1. 创建存储过程(SQL Server 端)
  2. 配置连接字符串(Web.config)
  3. 使用 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); } } } } }


关键点说明

  1. 参数方向

    ASP.NET如何调用SQL存储过程? | ASP.NET数据库操作实战教程 第2张

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

    ASP.NET如何调用SQL存储过程? | ASP.NET数据库操作实战教程 第3张

    • ExecuteReader():返回结果集(多行数据)
    • ExecuteNonQuery():返回受影响行数(INSERT/UPDATE/DELETE)
    • ExecuteScalar():返回单个值(如 COUNT(*))
  3. 参数类型匹配

    • 必须与存储过程定义的 SQL 类型匹配(如 SqlDbType.Int 对应 SQL 的 INT)
    • 最佳实践

      1. 使用 using 语句:自动释放连接和命令对象
      2. 参数化查询:防止 SQL 载入攻破
      3. 错误处理:用 try-catch 包裹数据库操作
      4. 连接字符串管理:集中存储在配置文件中
      5. 异步操作(可选):使用 ExecuteReaderAsync() 等异步方法提高并发能力

      注意:实际使用时需替换数据库连接字符串、存储过程名称和参数名称,并根据业务需求处理返回结果。

0