c#中调用存储过程怎么获取返回值?

redant0 2003-08-08 07:43:42
c#中调用存储过程怎么获取返回值?
...全文
165 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovered 2003-08-09
  • 打赏
  • 举报
回复
学习:)
alaisalaix 2003-08-08
  • 打赏
  • 举报
回复
初始值:myConnection = new SqlConnection("你的连接字符串");
构造parameters并调用RunProcedure
如下:
public int InsertNews(int categoryID,string title,string body,DateTime releaseTime,
DateTime ExpireTime)
{
int rowsAffected;
SqlParameter[] parameters = {
new SqlParameter("@CategoryID", SqlDbType.Int, 4),
new SqlParameter("@Title", SqlDbType.VarChar, 30),
new SqlParameter("@Body", SqlDbType.Text, 16),
new SqlParameter("@ReleaseDate",SqlDbType.DateTime,8),
new SqlParameter("@ExpireDate",SqlDbType.DateTime,8),
new SqlParameter("@NewsID",SqlDbType.Int,4) };
parameters[0].Value = categoryID;
parameters[1].Value = title;
parameters[2].Value = body;
parameters[3].Value = releaseDate;
parameters[4].Value = ExpireDate;
parameters[5].Direction=ParameterDirection.Output;
return RunProcedure("vw_News_InsertNews", parameters,out rowsAffected);
}
现写的,不知道有没有什么语法错误,好热。你还可以从parameters[5].Value中返回新插入的NewsID,并且还可以通过rowsAffected的值知道是否已经插入到数据库中
fly_zhou 2003-08-08
  • 打赏
  • 举报
回复
// SQL参数输入参数
public SqlParameter MakeInParam(string ParamName, SqlDbType DbType, int Size,
object Value)
{
return MakeParam(ParamName, DbType, Size, ParameterDirection.Input, Value);
}

// SQL参数输出参数
public SqlParameter MakeOutParam(string ParamName, SqlDbType DbType, int Size)
{
return MakeParam(ParamName, DbType, Size, ParameterDirection.Output, null);
}

在存储过程中定义与这样:
Create Proc ProcName(
@aa varchar(20),
@bb varchar(30) output
)

此时你就用
MakeInParam( @aa, SqlDbTypes.Varchar, 20 );
MakeOutParam( @bb, SqlDbTypes.Varchar, 30 );
...
alaisalaix 2003-08-08
  • 打赏
  • 举报
回复
BuildCommand()如下:
public SqlCommand BuildCommand(string storedProcName, IDataParameter[] parameters)
{
SqlCommand command = new SqlCommand( storedProcName, myConnection );
command.CommandType = CommandType.StoredProcedure;

foreach (SqlParameter parameter in parameters)
{
command.Parameters.Add( parameter );
}
command.Parameters.Add( new SqlParameter ( "ReturnValue",SqlDbType.Int,4,
ParameterDirection.ReturnValue,
false,
0,
0,
string.Empty,
DataRowVersion.Default,
null ));
return command;
}
alaisalaix 2003-08-08
  • 打赏
  • 举报
回复
这是我曾写过的一个存储过程:
CREATE PROCEDURE vw_News_InsertNews
@CategoryID int,
@Title varchar(250),
@Body text,
@ReleaseDate datetime,
@ExpireDate datetime,
@NewsID int OUTPUT
AS
INSERT INTO News_News(CategoryID, Title, Body, ReleaseDate, ExpireDate)
VALUES (@CategoryID, @Title, @Body, @ReleaseDate, @ExpireDate)

SET @NewsID = @@IDENTITY

IF @@ERROR > 0
BEGIN
RAISERROR ('Insert of News failed', 16, 1)
RETURN 99
END
ELSE
BEGIN
RETURN 1
END

返回:99 or 1
下面代码方法可调用该存储过程,当然之前myConnection和parameters必须构造好
/// <summary>
/// 这一方法有利于执行Insert,Update和Delete查询,返回一个数值条件代码,
/// 来说明查询是成功还是失败。
/// </summary>
/// <param name="storedProcName">存储过程名</param>
/// <param name="parameters">命令对象的参数</param>
/// <param name="rowsAffected">执行存储过程所影响的行数</param>
/// <returns>返回参数中ReturnValue的值</returns>
protected int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected )
{
int result;
myConnection.Open();
SqlCommand command = BuildCommand( storedProcName, parameters );//这个函数是我自定义的,根据parameters构造一个命令对象并返回
rowsAffected = command.ExecuteNonQuery();
result = (int)command.Parameters["ReturnValue"].Value;
//result即为返回值
myConnection.Close();
return result;
}
CMIC 2003-08-08
  • 打赏
  • 举报
回复
up
fourfire29 2003-08-08
  • 打赏
  • 举报
回复
同意 Lovest(大法师)
Lovest 2003-08-08
  • 打赏
  • 举报
回复
public string GetPriceLst(string StorageID,string MaterialID,string FactoryID,string inprice,string verif)
{
try
{
firstCommand = new OleDbCommand("M_GetPrice");
firstCommand.CommandType = CommandType.StoredProcedure;
firstCommand.Parameters.Clear();
OleDbParameter param = firstCommand.Parameters.Add("@StorageID", OleDbType.VarChar);
param.Value = StorageID;
param = firstCommand.Parameters.Add("@MaterialID", OleDbType.VarChar);
param.Value = MaterialID;
param = firstCommand.Parameters.Add("@FactoryID", OleDbType.VarChar);
param.Value = FactoryID;
param = firstCommand.Parameters.Add("@inprice", OleDbType.VarChar);
param.Value = inprice;
param = firstCommand.Parameters.Add("@Verif", OleDbType.VarChar);
param.Value = verif;
param = firstCommand.Parameters.Add("@Strprice", OleDbType.VarChar,100);
param.Value = "";
param.Direction = ParameterDirection.Output;
OleDbConnection Conn =new OleDbConnection(ClsDbConnect.ConnectionString );
Conn.Open();
firstCommand.Connection = Conn;
firstCommand.ExecuteNonQuery();
return firstCommand.Parameters["@Strprice"].Value.ToString();
}
catch (System.Exception eFillDataSet)
{
return eFillDataSet.Message;
}

}

110,529

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧