编辑
2025-09-22
C#
00

目录

摘要
正文
1. 准备存储过程
2. 创建数据库连接
3. 创建SqlCommand对象
4. 添加参数
5. 执行存储过程
6. 处理结果
7. 异常处理
8. 资源清理
实例

摘要

在C#中调用存储过程是一种常见的数据库交互方式,它可以帮助你执行复杂的数据库操作。

  1. 先将SQL业务逻辑在SQL中编辑好
  2. 在CMD中设置CMD的格式类型为存储过程类型
  3. SQL语句使用存储过程名称,参数和存储过程中参数一致

正文

1. 准备存储过程

确保数据库中已经定义了所需的存储过程。存储过程可以封装复杂的SQL查询、更新、删除等操作,通过参数传递数据。

2. 创建数据库连接

使用SqlConnection对象来建立与数据库的连接。连接字符串应包含服务器地址、数据库名以及认证信息。

3. 创建SqlCommand对象

创建一个SqlCommand对象,并将CommandType设置为CommandType.StoredProcedure,这表明你将执行一个存储过程。同时,指定存储过程的名称。

4. 添加参数

如果存储过程需要参数,使用Parameters.AddWithValue方法添加参数。确保参数名称和类型与存储过程中定义的一致。

5. 执行存储过程

根据存储过程的类型(查询、更新、删除等),使用ExecuteReaderExecuteScalarExecuteNonQuery方法执行存储过程。

6. 处理结果

根据执行的方法类型,处理返回的结果。例如,使用SqlDataReader遍历查询结果集。

7. 异常处理

使用try-catch块处理可能发生的异常,以确保程序的健壮性。

8. 资源清理

确保关闭数据库连接和释放资源,以避免内存泄漏。using语句可以自动处理资源清理。

实例

SQL
USE [bzscada] GO /****** Object: StoredProcedure [dbo].[sp_save_material] Script Date: 10/3/2022 6:54:44 AM ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER proc [dbo].[sp_save_material]( @mlfb nvarchar(50), @material_no nvarchar(50) ) as insert into wms_material(material_no,mlfb,description) values(@material_no,@mlfb,'')

image.png

C#
private void btnSp_Click(object sender, EventArgs e) { string ConnectionString = System.Configuration.ConfigurationManager.AppSettings["DataConnString"].ToString(); using (SqlConnection conn = new SqlConnection(ConnectionString)) { conn.Open(); SqlCommand sqlcom = new SqlCommand(); sqlcom.Connection = conn; sqlcom.CommandType = CommandType.StoredProcedure; sqlcom.CommandText = "sp_save_material"; sqlcom.Parameters.Add(new SqlParameter("@mlfb", "TEST")); sqlcom.Parameters.Add(new SqlParameter("@material_no", "TEST123")); sqlcom.ExecuteNonQuery(); } }

带返回的存储过程

C#
private void btnSpReturn_Click(object sender, EventArgs e) { string ConnectionString = System.Configuration.ConfigurationManager.AppSettings["DataConnString"].ToString(); using (SqlConnection conn = new SqlConnection(ConnectionString)) { conn.Open(); SqlCommand sqlcom = new SqlCommand(); sqlcom.Connection = conn; sqlcom.CommandType = CommandType.StoredProcedure; sqlcom.CommandText = "sp_find_material"; sqlcom.Parameters.Add(new SqlParameter("@mlfb", "TEST")); SqlParameter pRet = new SqlParameter("@totalcount", SqlDbType.Int, 4); //定义返回值参数 pRet.Direction = ParameterDirection.Output; sqlcom.Parameters.Add(pRet); DataSet ds = new DataSet(); SqlDataAdapter daMain = new SqlDataAdapter(); daMain.SelectCommand = sqlcom; daMain.Fill(ds); DataTable dt = ds.Tables[0]; var count = pRet.Value; } }

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!