欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

使用C#代码获取存储过程返回值

程序员文章站 2022-09-04 23:35:28
废话不多说,直接给大家贴c#代码了。 /// /// 执行存储过程,返回" 返回值" /// ...

废话不多说,直接给大家贴c#代码了。

/// <summary>
/// 执行存储过程,返回" 返回值"
/// </summary>
/// <param name="storedprocname">存储过程名</param>
/// <param name="parameters">存储过程参数</param>
/// <returns>执行存储过程的返回值</returns>
public static int runprocedurewithreturn(string storedprocname, idataparameter[] parameters)
{
using (sqlconnection connection = new sqlconnection(connectionstring))
{
int result;
connection.open();
sqlcommand command = buildintcommand(connection, storedprocname, parameters);
command.executenonquery();
result = (int)command.parameters["returnvalue"].value;
//connection.close();
return result;
}
}
/// <summary>
/// 创建 sqlcommand 对象实例(用来返回一个整数值) 
/// </summary>
/// <param name="storedprocname">存储过程名</param>
/// <param name="parameters">存储过程参数</param>
/// <returns>sqlcommand 对象实例</returns>
private static sqlcommand buildintcommand(sqlconnection connection, string storedprocname, idataparameter[] parameters)
{
sqlcommand command = buildquerycommand(connection, storedprocname, parameters);
command.parameters.add(new sqlparameter("returnvalue",
sqldbtype.int, 4, parameterdirection.returnvalue,
false, 0, 0, string.empty, datarowversion.default, null));
return command;
}

ps:在c#中调用存储过程中的两种返回值

//存储过程
//create proc authors_count @outrus int output
//as
//declare @authors int
//select @authors=count(*) from authors
//set @outrus=@authors
//return @authors
system.data.sqlclient.sqlconnection sqlcon=new system.data.sqlclient.sqlconnection("server=(local);database=pubs;uid=sa;pwd=;");
system.data.sqlclient.sqlcommand sqlcmd=new system.data.sqlclient.sqlcommand("authors_count",sqlcon);
sqlcmd.commandtype=system.data.commandtype.storedprocedure;
// sqlcmd.commandtext="authors_count";
// sqlcmd.connection=sqlcon;
sqlcmd.parameters.add("@rus",system.data.sqldbtype.int);
sqlcmd.parameters.add("@outrus",system.data.sqldbtype.int);
sqlcmd.parameters[0].direction=system.data.parameterdirection.returnvalue;
sqlcmd.parameters[1].direction=system.data.parameterdirection.output;
sqlcon.open();
//int res=(int)sqlcmd.executenonquery();//此时返回的不是存储过程的返回值,以上只是返回delete,update,insert所影响的行数
sqlcmd.executenonquery();
string res=sqlcmd.parameters[0].value.tostring();//这样就可以得到存储过程的返回值
sqlcon.close();
this.label1.text="存储过程的返回值是:"+res.tostring();//由return 返回
this.label2.text="存储过程中返回的output值:"+sqlcmd.parameters[1].value.tostring();//由output返回