接收存储过程返回字符串

踏平扶桑 2008-11-05 02:56:18
存储过程代码

ALTER PROCEDURE p_UpdateTree(
@MenuName nvarchar(50),
@MenuFather nvarchar(50),
@MenuGroup nvarchar(50),
@New_MenuName nvarchar(50),
@NewMenuAddress char(60),
@MenuShow bit,
@RValue nvarchar(10) output
)
AS
SET NOCOUNT ON

Update ControlTree Set MenuName=@New_MenuName,MenuAddress=@NewMenuAddress,MenuShow=@MenuShow
Where MenuName=@MenuName AND MenuFather=@MenuFather AND MenuGroup= @MenuGroup
IF @@ROWCOUNT>0
begin
set @RValue='OK'
end

ELSE
begin
set @RValue='Failed'
end
select @RValue
GO


程序接收代码

Public Function UpdateTree(ByVal MenuName As String, ByVal MenuFather As String, ByVal MenuGroup As String, ByVal New_MenuName As String, ByVal NewMenuAddress As String, ByVal MenuShow As Integer) As Boolean
Dim SqlCon As New SqlConnection
SqlCon = Consql()
Dim SqlComm As New SqlCommand("p_UpdateTree", SqlCon)
If SqlCon.State Then
Try
With SqlComm
.CommandType = CommandType.StoredProcedure
.Parameters.Add(New SqlParameter("@MenuName", MenuName))
.Parameters.Add(New SqlParameter("@MenuFather", MenuFather))
.Parameters.Add(New SqlParameter("@MenuGroup", MenuGroup))
.Parameters.Add(New SqlParameter("@New_MenuName", New_MenuName))
.Parameters.Add(New SqlParameter("@NewMenuAddress", NewMenuAddress & " "))
.Parameters.Add(New SqlParameter("@MenuShow", MenuShow))
.Parameters.Add(New SqlParameter("@RValue", "5"))
.Parameters("@RValue").Direction = ParameterDirection.Output
.ExecuteNonQuery()
End With
Dim i As String
i = SqlComm.Parameters("@RValue").Value.ToString.Trim()'这里是用来调试模式看返回值,总是返回空
If String.Equals(SqlComm.Parameters("@RValue").Value.ToString.Trim(), "OK") Then
Return True
Else
Return False
End If
Catch ex As Exception

Finally
SqlComm.Dispose()
If SqlCon.State Then SqlCon.Close()
SqlCon.Dispose()
End Try
Else
HttpContext.Current.Response.Write("打开数据库失败。请与管理员联系!")
HttpContext.Current.Response.End()
End If


存储过程我用查询分析器调试 完全正常 可以输出 OK 和Failed
但是用程序来接收返回值的时候,老是返回的空值。请大家帮忙看看是哪的问题
谢谢!!
...全文
209 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
踏平扶桑 2008-11-05
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 zhangzhicong 的回复:]
.Parameters.Add(New SqlParameter("@RValue", "5")) //老是感觉好象不对劲

你改为看看
.Parameters.Add(New SqlParameter("@RValue", SqlDbType.NVarChar,10))
[/Quote]
OK 搞定~~
zhangzhicong 2008-11-05
  • 打赏
  • 举报
回复
.Parameters.Add(New SqlParameter("@RValue", "5")) //老是感觉好象不对劲

你改为看看
.Parameters.Add(New SqlParameter("@RValue", SqlDbType.NVarChar,10))

踏平扶桑 2008-11-05
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 lala_1901 的回复:]
.Parameters("@RValue").Direction = ParameterDirection.Output改为.Parameters("@RValue").Direction = ParameterDirection.ReturnValue
[/Quote]
我是用一个参数来获取返回值的,所以ParameterDirection.ReturnValue 不适用 呵呵~~
ASPNETDB 2008-11-05
  • 打赏
  • 举报
回复
说错了
lala_1901 2008-11-05
  • 打赏
  • 举报
回复
.Parameters("@RValue").Direction = ParameterDirection.Output改为.Parameters("@RValue").Direction = ParameterDirection.ReturnValue
ASPNETDB 2008-11-05
  • 打赏
  • 举报
回复
.Parameters.Add(New SqlParameter("@RValue", "5"))
不要看下
lala_1901 2008-11-05
  • 打赏
  • 举报
回复
SqlParameter[] parm = new SqlParameter[]{new SqlParameter ("@username",username ),
new SqlParameter ("@password",password),
new SqlParameter ("@RETURN_VALUE","")};
parm[2].Direction = ParameterDirection.ReturnValue; CallDB.ExecuteNonQuery("Login", null, parm);
return parm[2].Value.ToString();
存储过程里return xxx 一下就可以了,不用加存储过程参数@reutrnxxx
比较简单易用!
踏平扶桑 2008-11-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zc0001 的回复:]

SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings[0]);
conn.Open();
SqlCommand comm = new SqlCommand();
SqlParameter prm = new SqlParameter();
comm.Connection = conn;
comm.CommandType = CommandType.StoredProcedure;
comm.CommandText = "proc_name";
comm.Parameters.Clear();
comm.Parameters.Add("@ExeDate", tbPlanDate.Text);
SqlDataReader sdr = comm.ExecuteRe…
[/Quote]
我在存储过程里面已经返回值了。不需要在这样判断了。呵呵~~
现在的情况是我的程序无法接收到存储过程返回的字符串。 存储过程在查询分析器里调试正常
zc0001 2008-11-05
  • 打赏
  • 举报
回复

SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings[0]);
conn.Open();
SqlCommand comm = new SqlCommand();
SqlParameter prm = new SqlParameter();
comm.Connection = conn;
comm.CommandType = CommandType.StoredProcedure;
comm.CommandText = "proc_name";
comm.Parameters.Clear();
comm.Parameters.Add("@ExeDate", tbPlanDate.Text);
SqlDataReader sdr = comm.ExecuteReader(); //返回值
if (sdr.Read())
{...
zc0001 2008-11-05
  • 打赏
  • 举报
回复
SqlDataReader sdr = comm.ExecuteReader(); //返回值
if (sdr.Read())
{
...
踏平扶桑 2008-11-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 deansroom 的回复:]
ExecuteNonQuery
???????
就不能用有返回值的?
[/Quote]
我在存储过程中直接返回 OK 程序也接收不到返回值,接收到的还是空值
deansroom 2008-11-05
  • 打赏
  • 举报
回复
ExecuteNonQuery
???????
就不能用有返回值的?
踏平扶桑 2008-11-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuyq11 的回复:]
ExecuteReader
[/Quote]
不行
wuyq11 2008-11-05
  • 打赏
  • 举报
回复
ExecuteReader
踏平扶桑 2008-11-05
  • 打赏
  • 举报
回复
自顶一下
踏平扶桑 2008-11-05
  • 打赏
  • 举报
回复
顶一下

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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