怎样获取存储过程 output 的参量值 100分 急 初学者的疑惑

caorobby 2004-09-14 10:32:02
REATE PROCEDURE sp_Login
@LoginName varchar(20) ,--登陆
@PassWord VARCHAR(10),
@Depart tinyint,
@power SMALLINT OUTPUT,
@UserID INT OUTPUT,
@UserName VARCHAR(10) output,--用户名
@Workpos smallint output
AS
IF NOT EXISTS(SELECT * FROM [职员资料] WHERE [登录名]=@LoginName AND [密码]=@PassWord and 业务部门=@Depart and 注销=0 )
BEGIN
RETURN 111--登录名和密码和业务部门错误
END

SELECT @UserName=[姓名]
FROM [职员资料]
GO
怎样获取 ◎username
...全文
385 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
lglesias 2004-09-14
  • 打赏
  • 举报
回复
ding xia
dofly 2004-09-14
  • 打赏
  • 举报
回复
奇怪,这么简单一个取值,做这么复杂。

就取一个 UserName, 上面的代码都可以取出来的呀

下面的这个更简单
如果你只要返回一个值,就用下面的语法简单多了。
If Cn.State = ConnectionState.Closed Then Cn.Open()
GetCmd = New SqlCommand("Select isnull(username,'') From pu_userlist where userid ='" & gsUserID & "'", Cn)
gsUserName = GetCmd.ExecuteScalar


chenhaohf 2004-09-14
  • 打赏
  • 举报
回复
直接取肯定是可以的

IF NOT EXISTS(SELECT * FROM [职员资料] WHERE [登录名]=@LoginName AND [密码]=@PassWord and 业务部门=@Depart and 注销=0 )
BEGIN
增加 set @Workpos =111
RETURN
END
或在查询分析器里调试一下,先看看有没有返回值
CSDN_0 2004-09-14
  • 打赏
  • 举报
回复
都不行吗?加个Try <内容> Catch捕捉错误看看。
caorobby 2004-09-14
  • 打赏
  • 举报
回复
获取的值显示为◎username
为什么
caorobby 2004-09-14
  • 打赏
  • 举报
回复
获取的◎username
为什么
dofly 2004-09-14
  • 打赏
  • 举报
回复
如果你只要返回一个值,就用下面的语法简单多了。
If Cn.State = ConnectionState.Closed Then Cn.Open()
GetCmd = New SqlCommand("Select isnull(username,'') From pu_userlist where userid ='" & gsUserID & "'", Cn)
gsUserName = GetCmd.ExecuteScalar


'将 Where 后面跟着你的条件,
'如果有值的话,gsUserNmae 就是你要的值
'当然你可以加上 Try ......catch

dofly 2004-09-14
  • 打赏
  • 举报
回复
其实没有必要做得这么麻烦,如果你只要一个 UserName 的话
把你的 Sql语句 放到 SQLCommand 里面做为命令文本,然后
Result=mycommand.ExecuteScalar
就可以了返回了
CSDN_0 2004-09-14
  • 打赏
  • 举报
回复
dim cmd as new command
cmd.CommandType = CommandType.StoredProcedure
cmd.Connection = conn

Dim sp As SqlParameter = cmd.Parameters.Add("@UserName", SqlDbType.VarChar)
sp.Direction = ParameterDirection.Output

dim strUserName as string
strUserNsme =sp.value
caorobby 2004-09-14
  • 打赏
  • 举报
回复
当然.net中了
dofly 2004-09-14
  • 打赏
  • 举报
回复
你是在存储过程返回值
还是在.NET中取回值呀
下面的代码从.NET中执行,并取回 UserName

Public Function UeGetUsername() As String
Dim CN As SqlConnection
Dim Result As String = ""
Dim MyCommand As New SqlCommand("SP_LOGIN", CN)
Try
If CN.State = ConnectionState.Closed Then CN.Open()
MyCommand.CommandType = CommandType.StoredProcedure
Dim MyParam As SqlParameter
'第一个参数
MyParam = MyCommand.Parameters.Add("@loginname", SqlDbType.VarChar, 20)
MyParam.Direction = ParameterDirection.Input
'第二个
MyParam = MyCommand.Parameters.Add("@password", SqlDbType.VarChar, 10)
MyParam.Direction = ParameterDirection.Input
'第三个
MyParam = MyCommand.Parameters.Add("@depart", SqlDbType.TinyInt)
MyParam.Direction = ParameterDirection.Input
'第四个
MyParam = MyCommand.Parameters.Add("@power", SqlDbType.SmallInt)
MyParam.Direction = ParameterDirection.Output
'第五个
MyParam = MyCommand.Parameters.Add("@userid", SqlDbType.Int)
MyParam.Direction = ParameterDirection.Output
'第六个
MyParam = MyCommand.Parameters.Add("@username", SqlDbType.VarChar, 10)
MyParam.Direction = ParameterDirection.Output
'第七个
MyParam = MyCommand.Parameters.Add("@workpos", SqlDbType.SmallInt)
MyParam.Direction = ParameterDirection.Output

'赋值
MyCommand.Parameters("userid").Value = 122
.
.
.

MyCommand.ExecuteNonQuery()
Result = MyCommand.Parameters("@username").Value.ToString()
Catch ex As Exception
MsgBox(ex.Message)
Finally
MyCommand.Dispose()
End Try
Return Result
End Function
ny_nicholas 2004-09-14
  • 打赏
  • 举报
回复
参数的值赋给你的变量
caorobby 2004-09-14
  • 打赏
  • 举报
回复
SELECT @UserName=[姓名]
WHERE [登录名]=@LoginName AND [密码]=@PassWord and 业务部门=@Depart and 注销=0

dim str as string
str = myParameter.Value


str为空 不知怎么回事
CSDN_0 2004-09-14
  • 打赏
  • 举报
回复
SELECT @UserName=[姓名]
WHERE [登录名]=@LoginName AND [密码]=@PassWord and 业务部门=@Depart and 注销=0

你可以优化一下你的存储过程。
ark_matrix 2004-09-14
  • 打赏
  • 举报
回复
Dim myParameter As New SqlParameter("@Description", SqlDbType.VarChar)
myParameter.Direction = ParameterDirection.Output

执行存储过程,

dim str as string
str = myParameter.Value
DotCat 2004-09-14
  • 打赏
  • 举报
回复
在DataAccess层中:

Public Function GetUsername(ByVal LoginName As String, ByVal Password As String) As String

Dim Da As New SqlDataAdapter()
Try

Dim Params() As SqlParameter = {New SqlParameter("@LoginName ", SqlDbType.VarChar, 10), _
New SqlParameter("@Password", SqlDbType.VarChar, 20), _
New SqlParameter("@UserName ", SqlDbType.VarChar, 100)}

Params(0).Value = LoginName
Params(1).Value = Password
Params(2).Value = Nothing

Params(2).Direction = ParameterDirection.Output

Da.SelectCommand = ObjData.createCmd("sp_Login", Params, CommandType.StoredProcedure)
Da.SelectCommand.ExecuteNonQuery()


Return Params(2).Value

Catch e As Exception

Return ""

End Try

End Function

其余参数请楼主自行添加到Function
ark_matrix 2004-09-14
  • 打赏
  • 举报
回复
在执行存储过程后,把参数的值赋给你的变量.

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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