探讨一个ADO.NET 2.0下一个获取存储过程返回值的有关问题
探讨一个ADO.NET 2.0下一个获取存储过程返回值的问题
疑问情况:
我要获取一个存储过程RETURN回的INT值,通过“.Parameters.Add(New SqlClient.SqlParameter( "Return ", SqlDbType.Int, 4, ParameterDirection.ReturnValue))”这样的方法一直出错,报告“调用的存储过程参数过多”。尝试N次,分别更换过 "Return ", "@Return ", "ReturnValue ",甚至删除这个Parameter.Name,运行后都提示相同错误——“参数过多”
后来,我索性新建了一个Parameter对象,仅仅做了一个Direction设置,然后ADD进Parameters。运行后查看Value,有正确的返回值。
程序是运行成功了,但是这种做法让我感觉,代码看上去很不爽。不知道各位是否有这方面经验,我依然希望能够用1行代码解决问题。
存储过程如下:
--------------------------------------
--验证用户名以及口令,正确通过的,过程返回0,用户名错误的,返回-200,密码错误的,返回-201
--2007.5.4
CREATE PROCEDURE VerifyID
@UserID varchar(50),
@Password varchar(50)
AS
DECLARE
@thispassword varchar(50)
DECLARE uspw CURSOR Read_only
FOR SELECT Password
FROM [User]
WHERE [User].UserID=@UserID
OPEN uspw
FETCH uspw INTO @thispassword
IF @@Fetch_status = 0
BEGIN
IF @thispassword=@Password
--通过验证
RETURN 0
ELSE
RETURN -201
END
ELSE
RETURN -200
GO
VB.NET 2005的代码如下
-------------------------------------
Dim DotNetConn As SqlClient.SqlConnection = New SqlClient.SqlConnection
Dim fs_dbDataSet1 As New fs_dbDataSet
Dim mycommand As SqlClient.SqlCommand = New SqlClient.SqlCommand( "VerifyID ", DotNetConn)
Dim myIE As New System.Diagnostics.Process
Dim intSP as integer
DotNetConn.ConnectionString = "; "
DotNetConn.Open()
Dim ret0 As New SqlClient.SqlParameter
With mycommand
.CommandType = CommandType.StoredProcedure
.Parameters.Add(New SqlClient.SqlParameter( "@UserID ", UsernameTextBox.Text))
.Parameters.Add(New SqlClient.SqlParameter( "@Password ", PasswordTextBox.Text))
ret0.Direction = ParameterDirection.ReturnValue
.Parameters.Add(ret0)
.ExecuteNonQuery()
intSP = ret0.Value
MsgBox(intSP.ToString)
End With
------解决方案--------------------
关注
------解决方案--------------------
分就不要给我了,我也是新手。
我觉得就是这样的,只能设置方向。我还是尽量避免取用存储过程的返回值,感觉和它打交道还是比较麻烦的,还是用SQL查询返回结果吧。
存储过程也就是快点,但要分场合。我一般用存储过程处理大数据量的工作,比如导入导出。小量多次的操作,数据库优化足够解决了,不必用存储过程。
想在一句话里解决问题,就算是解决了,也很费解,不是么?
------解决方案--------------------
建议:
不要返回那些INT,直接用文字,不然有一天,你会晕的。
------解决方案--------------------
疑问情况:
我要获取一个存储过程RETURN回的INT值,通过“.Parameters.Add(New SqlClient.SqlParameter( "Return ", SqlDbType.Int, 4, ParameterDirection.ReturnValue))”这样的方法一直出错,报告“调用的存储过程参数过多”。尝试N次,分别更换过 "Return ", "@Return ", "ReturnValue ",甚至删除这个Parameter.Name,运行后都提示相同错误——“参数过多”
后来,我索性新建了一个Parameter对象,仅仅做了一个Direction设置,然后ADD进Parameters。运行后查看Value,有正确的返回值。
程序是运行成功了,但是这种做法让我感觉,代码看上去很不爽。不知道各位是否有这方面经验,我依然希望能够用1行代码解决问题。
存储过程如下:
--------------------------------------
--验证用户名以及口令,正确通过的,过程返回0,用户名错误的,返回-200,密码错误的,返回-201
--2007.5.4
CREATE PROCEDURE VerifyID
@UserID varchar(50),
@Password varchar(50)
AS
DECLARE
@thispassword varchar(50)
DECLARE uspw CURSOR Read_only
FOR SELECT Password
FROM [User]
WHERE [User].UserID=@UserID
OPEN uspw
FETCH uspw INTO @thispassword
IF @@Fetch_status = 0
BEGIN
IF @thispassword=@Password
--通过验证
RETURN 0
ELSE
RETURN -201
END
ELSE
RETURN -200
GO
VB.NET 2005的代码如下
-------------------------------------
Dim DotNetConn As SqlClient.SqlConnection = New SqlClient.SqlConnection
Dim fs_dbDataSet1 As New fs_dbDataSet
Dim mycommand As SqlClient.SqlCommand = New SqlClient.SqlCommand( "VerifyID ", DotNetConn)
Dim myIE As New System.Diagnostics.Process
Dim intSP as integer
DotNetConn.ConnectionString = "; "
DotNetConn.Open()
Dim ret0 As New SqlClient.SqlParameter
With mycommand
.CommandType = CommandType.StoredProcedure
.Parameters.Add(New SqlClient.SqlParameter( "@UserID ", UsernameTextBox.Text))
.Parameters.Add(New SqlClient.SqlParameter( "@Password ", PasswordTextBox.Text))
ret0.Direction = ParameterDirection.ReturnValue
.Parameters.Add(ret0)
.ExecuteNonQuery()
intSP = ret0.Value
MsgBox(intSP.ToString)
End With
------解决方案--------------------
关注
------解决方案--------------------
分就不要给我了,我也是新手。
我觉得就是这样的,只能设置方向。我还是尽量避免取用存储过程的返回值,感觉和它打交道还是比较麻烦的,还是用SQL查询返回结果吧。
存储过程也就是快点,但要分场合。我一般用存储过程处理大数据量的工作,比如导入导出。小量多次的操作,数据库优化足够解决了,不必用存储过程。
想在一句话里解决问题,就算是解决了,也很费解,不是么?
------解决方案--------------------
建议:
不要返回那些INT,直接用文字,不然有一天,你会晕的。
------解决方案--------------------