C#调用存储过程详解(带返回值、参数输入输出等)

介绍

在使用C#开发的过程中,经常需要调用存储过程来完成某些任务,比如从数据库中获取数据或者执行一些复杂的数据处理操作。本文将详细介绍C#调用存储过程的方法,包括如何传入参数、传递多个参数、以及如何获取存储过程的返回值。

调用带参数的存储过程

首先,我们需要连接到数据库。以使用SQL Server为例:

using System.Data.SqlClient;

// 连接到数据库
SqlConnection conn = new SqlConnection("server=(local);database=TestDB;uid=testuser;pwd=testpwd");
conn.Open();

接下来,我们定义调用存储过程的代码:

// 定义Command对象
SqlCommand cmd = new SqlCommand("存储过程名", conn);
cmd.CommandType = CommandType.StoredProcedure;

// 添加参数
cmd.Parameters.Add("@参数名", SqlDbType.VarChar, 50).Value = "参数值";

// 执行存储过程
cmd.ExecuteNonQuery();

在这个示例中,我们定义了一个SqlCommand对象,并设置了参数类型,以及传入的参数值。最后,我们调用了ExecuteNonQuery方法来执行存储过程。

如果存储过程需要多个参数,我们可以通过类似下面的方式添加参数:

cmd.Parameters.Add("@参数名1", SqlDbType.VarChar, 50).Value = "参数值1";
cmd.Parameters.Add("@参数名2", SqlDbType.VarChar, 50).Value = "参数值2";

调用带返回值的存储过程

如果存储过程具有返回值,则我们需要使用ExecuteScalar方法来获取返回值。示例如下:

// 定义Command对象
SqlCommand cmd = new SqlCommand("存储过程名", conn);
cmd.CommandType = CommandType.StoredProcedure;

// 添加参数
cmd.Parameters.Add("@参数名", SqlDbType.VarChar, 50).Value = "参数值";

// 执行存储过程并获取返回值
int result = (int)cmd.ExecuteScalar();

在这个示例中,我们使用ExecuteScalar方法来获取存储过程的返回值,并将返回值转换为int类型。

调用带输入输出参数的存储过程

如果存储过程需要传递输入输出参数,则需要使用SqlParameter对象来定义和设置参数,以及使用ExecuteNonQuery或ExecuteScalar方法来执行存储过程。示例如下:

// 定义Command对象
SqlCommand cmd = new SqlCommand("存储过程名", conn);
cmd.CommandType = CommandType.StoredProcedure;

// 添加输入参数
SqlParameter inputParam = cmd.Parameters.Add("@参数名", SqlDbType.VarChar, 50);
inputParam.Value = "输入参数值";

// 添加输出参数
SqlParameter outputParam = cmd.Parameters.Add("@参数名", SqlDbType.VarChar, 50);
outputParam.Direction = ParameterDirection.Output;

// 执行存储过程
cmd.ExecuteNonQuery();

// 获取输出参数的值
string outputValue = (string)outputParam.Value;

在这个示例中,我们定义了一个输入参数和一个输出参数,并通过Direction属性设置了输出参数的方向。最后,我们使用ExecuteNonQuery方法来执行存储过程,并通过输出参数的Value属性来获取输出参数的值。

示例

下面展示一个具体的示例,这个示例用到了上述的三种不同的技巧。

// 定义Command对象
SqlCommand cmd = new SqlCommand("存储过程名", conn);
cmd.CommandType = CommandType.StoredProcedure;

// 添加输入参数
SqlParameter inputParam = cmd.Parameters.Add("@输入参数名", SqlDbType.VarChar, 50);
inputParam.Value = "输入参数值";

// 添加输出参数
SqlParameter outputParam = cmd.Parameters.Add("@输出参数名", SqlDbType.VarChar, 50);
outputParam.Direction = ParameterDirection.Output;

// 添加返回值参数
SqlParameter returnValueParam = new SqlParameter("@returnValue", SqlDbType.Int);
returnValueParam.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(returnValueParam);

// 执行存储过程
cmd.ExecuteNonQuery();

// 获取输出参数的值
string outputValue = (string)outputParam.Value;

// 获取返回值
int returnValue = (int)cmd.Parameters["@returnValue"].Value;

在这个示例中,我们定义了一个输入参数、一个输出参数和一个返回值参数,并通过Direction属性设置了输出参数的方向。最后,我们使用ExecuteNonQuery方法来执行存储过程,并通过输出参数的Value属性和返回值参数的Value属性来获取输出参数的值和返回值。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#调用存储过程详解(带返回值、参数输入输出等) - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • 解析在C#中接口和类的异同

    解析在C#中接口和类的异同 在C#中,接口和类都是面向对象编程中的重要概念,它们有一些相同点,也有一些差异。本文将从以下几个方面对接口和类进行比较,以帮助读者更好地理解它们之间的异同。 1. 定义 类是一种可以实例化的数据类型,它具有特定的属性和方法。类定义了数据类型的结构和行为,它是代码的基本组织单元。C#中,定义类的语法如下: class ClassNa…

    C# 2023年5月15日
    00
  • C#反射之基础应用实例总结

    C#反射之基础应用实例总结 本文将介绍C#中反射的基础应用实例,并通过两个示例来说明反射的具体操作。 什么是反射? 反射是指在运行时检查类型信息并提供操作类型成员的能力。在C#中,使用反射可以动态获取类型信息、创建对象实例、调用方法和访问属性等。 反射的基本应用 获取类型信息 可以使用Type类的静态方法来获取类型信息。如下代码示例获取了Person类的类型…

    C# 2023年6月7日
    00
  • asp.net读取excel文件的三种方法示例

    标题:ASP.NET读取Excel文件的三种方法示例 读取Excel文件是一个常见的需求,ASP.NET提供了多种方式读取Excel文件,本文将介绍三种方法示例。 1. 使用OleDbDataReader读取Excel文件 通过OleDbDataReader可以读取Excel文件的数据,需要注意的是,连接字符串中需要指定Excel文件的路径和名称,具体代码如…

    C# 2023年6月3日
    00
  • CommunityToolkit.Mvvm系列文章导航

    包 CommunityToolkit.Mvvm (又名 MVVM 工具包,以前名为 Microsoft.Toolkit.Mvvm) 是一个现代、快速且模块化的 MVVM 库。 它是 .NET 社区工具包的一部分,围绕以下原则构建: 平台和运行时独立 – .NET Standard 2.0、 .NET Standard 2.1 和 .NET 6? (UI Fr…

    C# 2023年4月22日
    00
  • C#中使用jieba.NET、WordCloudSharp制作词云图的步骤

    下面我将为您详细讲解 C# 中使用 jieba.NET 和 WordCloudSharp 制作词云图的步骤。 准备环境 首先,您需要准备好以下环境: .NET Framework 4.0 及以上版本; jieba.NET; WordCloudSharp。 安装 jieba.NET jieba.NET 是一个分词工具,可以将文本分解成单词。您可以将其安装到您的…

    C# 2023年5月31日
    00
  • 使用C#中的Flags特性

    使用C#中的Flags特性,可以为枚举类型的每个成员指定一个位掩码,以便组合多个成员的标志值。在本文中,我们将讲解如何使用Flags特性,并给出两个示例来说明其用法。 何时使用Flags特性 在需要对枚举类型中的多个成员使用二进制标志值时,就可以考虑使用Flags特性来解决。通过使用Flags特性,可以将多个成员的二进制标志值组合在一起,快速判断多个标志是否…

    C# 2023年6月3日
    00
  • ASP.NET Internet安全Forms身份验证方法

    ASP.NET Internet安全Forms身份验证方法 ASP.NET Internet安全Forms身份验证方法是一种用于保护ASP.NET Web应用程序的身份验证方法。本文将提供详细的“ASP.NET Internet安全Forms身份验证方法”的完整攻略,包括如何配置Web.config文件、如何使用Forms身份验证方法以及两个示例。 配置We…

    C# 2023年5月15日
    00
  • C#内置队列类Queue用法实例

    C#内置队列类Queue用法实例 本文将详细讲解C#内置队列类Queue的用法,包括如何创建队列、添加元素、删除元素、获取队列中元素数量等操作。 创建和初始化队列 在C#中,可以使用Queue类来创建一个队列。T代表存储在队列中的元素类型。我们可以在创建队列的同时指定元素类型,也可以在后续操作中动态添加元素类型。下面是一个创建包含整数的队列的示例: Queu…

    C# 2023年6月7日
    00
合作推广
合作推广
分享本页
返回顶部