浏览:5252007-11-23 16:05   来自康冉冉      :

获取的存储过程的返回值:
command.ExecuteNonQuery();

string id = command.Parameters[9].Value.ToString();
这样为什么取不到值啊?

楼主
  9个月前   陈思涵      :
Create proc sp_returnValue

as
declare @ReturnValue int
select @ReturnValue=count(*) from table
return @ReturnValue
go

public static int ReturnIntValue(string storedProcName,IDataParameter[] parameters)
{
SqlConnection myConnection=new SqlConnection(数据库连接);

if (myConnection.State==ConnectionState.Open)
{
myConnection.Close();
myConnection.Dispose();
}

myConnection.Open();

SqlCommand cmd=BuildQueryCommand(storedProcName,parameters,myConnection);

SqlParameter p=cmd.CreateParameter(); //创建一个参数,用以接收存储过程中的return值
p.ParameterName="returnValue";
p.Direction=ParameterDirection.ReturnValue;

cmd.Parameters.Add(p);

cmd.ExecuteNonQuery();

int intReturnValue=(int)cmd.Parameters["returnValue"].Value;

cmd.Dispose();
myConnection.Close();

return intReturnValue;

}

调用 int intValue=类.ReturnIntValue("sp_returnValue",null)

这儿输入参数为空,所以为null

1楼 回到顶楼 
  9个月前   康冉冉      :
------------------------------------
CREATE PROCEDURE UP_t_companyInfo_ADD
@companyName varchar(50) ,
@Country varchar(10) ,
@Province varchar(10) ,
@City varchar(10) ,
@Area varchar(10) ,
@Address varchar(50) ,
@Postcode varchar(10),
@RegisterIP varchar(20),
@HomePage varchar(50),
@NewCode varchar(5) output --新的编码

AS
BEGIN TRAN --开始事务处理

Declare @MaxCode INT --最大编号
-- Declare @NewCode varchar(5)
Declare @CodeLen INT --编号长度

Select @MaxCode = ISNULL(MAX(CAST(companyCode as INT)),0) From t_companyInfo

SET @NewCode = CAST((@MaxCode+1) AS Varchar(5)) --转换成文本型

SET @CodeLen = LEN(@NewCode)

IF @CodeLen = 1
BEGIN
SET @NewCode= '0000'+@NewCode
END

IF @CodeLen = 2
BEGIN
SET @NewCode= '000'+@NewCode
END

IF @CodeLen = 3
BEGIN
SET @NewCode= '00'+@NewCode
END
IF @CodeLen = 4
BEGIN
SET @NewCode= '0'+@NewCode
END

INSERT INTO t_companyInfo(
[companyCode],[companyName],[Country],[Province],[City],[Area],[Address],[Postcode],[RegisterIP],[HomePage]
)VALUES(
@NewCode,@companyName,@Country,@Province,@City,@Area,@Address,@Postcode,@RegisterIP,@HomePage
)

IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
Set @NewCode = ''
RETURN
END

COMMIT TRAN
--Set @NewCode = 1



GO


代码:
//获取SqlCommand
SqlCommand command = new SqlCommand("UP_t_companyInfo_ADD", SqlConn);
command.CommandTimeout = 1800;
SqlDataAdapter dataAdapter = new SqlDataAdapter(command);
command.CommandType = CommandType.StoredProcedure;

//添加参数
command.Parameters.Add(new SqlParameter("@companyName", SqlDbType.VarChar,50));
command.Parameters["@companyName"].Value = model.companyName;

command.Parameters.Add(new SqlParameter("@Country", SqlDbType.VarChar, 10));
command.Parameters["@Country"].Value = model.Country;

command.Parameters.Add(new SqlParameter("@Province", SqlDbType.VarChar, 10));
command.Parameters["@Province"].Value = model.Province;

command.Parameters.Add(new SqlParameter("@City", SqlDbType.VarChar, 10));
command.Parameters["@City"].Value = model.City;

command.Parameters.Add(new SqlParameter("@Area", SqlDbType.VarChar, 10));
command.Parameters["@Area"].Value = model.Area;

command.Parameters.Add(new SqlParameter("@Address", SqlDbType.VarChar,50));
command.Parameters["@Address"].Value = model.Address;

command.Parameters.Add(new SqlParameter("@Postcode", SqlDbType.VarChar, 10));
command.Parameters["@Postcode"].Value = model.Postcode;

command.Parameters.Add(new SqlParameter("@homePage", SqlDbType.VarChar, 50));
command.Parameters["@homePage"].Value = model.homePage;

command.Parameters.Add(new SqlParameter("@RegisterIP", SqlDbType.VarChar, 50));
command.Parameters["@RegisterIP"].Value = model.RegisterIP;

command.Parameters.Add(new SqlParameter("@NewCode", SqlDbType.VarChar, 5));
command.Parameters["@NewCode"].Value = "";


try
{
if (SqlConn.State != ConnectionState.Open)
{
SqlConn.Open();
}
command.ExecuteNonQuery();

string id = command.Parameters[9].Value.ToString();
return id;
}
catch
{
return "0";
}
finally
{
SqlConn.Close();
}
取到的值是""

不知道具体怎么回事啊?
2楼 回到顶楼 
  9个月前   康冉冉      :
谢谢 : 陈思涵:

解决了,我没加
command.Parameters[9].Direction = ParameterDirection.Output;

加上就对了,:)
3楼 回到顶楼 
  9个月前   潜水游      :
是呀,其实问题很简单
4楼 回到顶楼 
  9个月前   潜水游      :
你用过sqlhelper 吗?
5楼 回到顶楼 
  9个月前   RanKang      :
@潜水游
用过,只是没有找到可以返回的函数啊?
不知道是哪个呢
6楼 回到顶楼 

注册用户登录后才能回复,登录注册
> 返回“ASP.NET”


其他话题

相关链接
1 24514