介绍
在使用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技术站