通过odbc访问syabse的存储过程,取不到输出参数,请问是怎么回事?

sunck 2014-03-10 09:04:33
存储过程是

create procedure [dbo].[sp_get_ad_serial_number]
@table_name varchar(60) ,
@RecordID varchar(20) output
as
begin
declare
@yearmonth varchar(20) ,
@new_yearmonth varchar(20) ,
@num integer,
@ID decimal(38, 0)

select @yearmonth=convert(char(7),getdate(),111)
select @new_yearmonth=convert(char(6),getdate(),112)

begin tran
select @num=COUNT(1) from advanced_serial_number where table_name=@table_name and yearmonth=@yearmonth
if (@num=0)
begin
insert advanced_serial_number values(@table_name,@yearmonth,0)
select @ID =0
end
else
begin
update advanced_serial_number set id=id+1 where table_name=@table_name and yearmonth=@yearmonth
select @ID =id from advanced_serial_number where table_name=@table_name and yearmonth=@yearmonth
end

--print @yearmonth
---print @ID
commit tran
select @RecordID=@new_yearmonth+right('00000'+convert(varchar(10),@ID),6)
print @RecordID
return 0
end
c#程序
decimal d_serial = 0;
string v_serial = "";
using (OdbcConnection conn = new OdbcConnection(connectionString))
{
OdbcCommand cmd = new OdbcCommand("sp_get_ad_serial_number ?,?", conn);
cmd.CommandType = CommandType.StoredProcedure;
//cmd.Parameters.AddWithValue("@table_name", "ivr_task");
//cmd.Parameters.Add("@RecordID", OdbcType.VarChar, 20).Direction = ParameterDirection.Output;

OdbcParameter p1 = new OdbcParameter("@table_name", OdbcType.VarChar, 60);
p1.Direction = ParameterDirection.Input;
p1.Value = "ivr_task";
cmd.Parameters.Add(p1);
OdbcParameter p2 = new OdbcParameter("@RecordID", OdbcType.VarChar, 20);
p2.Direction = ParameterDirection.Output;
//p2.Value = "1";
cmd.Parameters.Add(p2);

try
{
conn.Open();
i=cmd. ExecuteNonQuery();
//cmd.ExecuteReader();
v_serial = p2.Value.ToString();
//d_serial = Convert.ToDecimal( cmd.Parameters["@RecordID"].Value.ToString());
}
catch (OdbcException ex)
{
status.Text = ex.Message+ "警告:调用ivr_task流水号失败!";//terminal_reimbursement
return;
}
finally
{
conn.Close();
}
}
TaskCD.Text = Convert.ToString(d_serial);
...全文
142 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
iihero 2014-03-12
  • 打赏
  • 举报
回复
不建议采用ODBC方式进行.net连接, 你可以采用OLEDB方式或者是ASE自带的ADO.NET驱动进行连接,都支持输出参数的取出。 下文有详细的例子。 http://blog.csdn.net/iihero/article/details/5514142 或者,如果你愿意尝试,参数一下其中的代码, OdbcCommand cmd = new OdbcCommand("sp_get_ad_serial_number ?,?", conn); 中间的commandtext改为: {call sp_get_ad_serial_number (?,?) }这种标准格式试试。

2,596

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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