请问如何向存储过程传递内容并且获得返回值?急,在线给分!

屡败屡战数马援 2002-08-18 04:18:58
我做了一个存储过程,代码如下:
-----------------------------------------------------
CREATE PROCEDURE [AddNewProj]
(@proj_ID [char](50), @proj_Name [char](100), @proj_Add [char](200),
@proj_tel1 [char](50),@proj_tel2 [char](50), @proj_tel3[char](50), @proj_owner[char](100),
@proj_money [char](50), @proj_cont[char](500),@backErr integer output)

AS
IF EXISTS (SELECT * FROM t_project WHERE proj_ID=@proj_ID)
/*检查,如用户输入的ID数据库已经有,则返回2 */
BEGIN
SELECT @backErr=2
END
Else
BEGIN
INSERT INTO [sanxing].[dbo].[t_project]
( [proj_ID],
[proj_Name],
[proj_Add],
[proj_tel1],
[proj_tel2],
[proj_tel3],
[proj_owner],
[proj_money],
[proj_cont])
VALUES
( @proj_ID,
@proj_Name,
@proj_Add,
@proj_tel1,
@proj_tel2,
@proj_tel3,
@proj_owner,
@proj_money,
@proj_cont)
IF @@ERROR <> 0
/* 成功返回0 */
BEGIN
SELECT @backErr=0
End
ELSE
BEGIN
/*失败返回1 */
SELECT @backErr=1
END
End
GO
-----------------------------------
其中 @backErr integer output 为我自己定义的返回值

现在我在aspx页面中定义了使用存储过程向数据库中插入数据,页面已经做好,文本框什么的。
我定义使用存储过程的代码是:
--------------------------------------
Dim strInsertCmd As String="AddNewProj" '定义命令字符串,实际上是存储过程的名字

objCommand= New SQLCommand(strInsertCmd,objConn) '定义命令对象
objCommand.CommandType=CommandType.StoredProcedure '声明命令类型为存储过程
--------------------------------------

然后向存储过程传输数据:
--------------------------------------
objCommand.Parameters.Add(New SqlParamete("@proj_ID",SqlDbType.VarChar,50)) '定义新的参数,存储过程用的变量名,类型是Char,长度为50

objCommand.Parameters("@proj_ID").Value=txtID.Text '这个参数的内容为文本框txtID的内容
--------------------------------------

以上代码全部通过

现在要获得存储过程运行后的返回值

--------------------------------------
'定义新的对象,设定存储过程变量为@backErr,类型是Integer
objCommand.Parameters.Add(New SqlParameter("@backErr",SqlDbType.Integer))
'把这个存储过程的内容设定为存储过程的返回值
objCommand.Parameters("@backErr").Value=ParameterDirection.Output
--------------------------------------

问题出来了:
.net FrameWork提示:
“Integer”不是“System.Data.SqlDbType”的成员。

而对应我在存储过程中定义的
@backErr integer output
就是设定存储过程的返回值,并且设定为Integer整型

现在我的问题是:
1. 请给出获得名叫@backErr的返回值的代码,如果我的存储过程编写有错误,请指出。
2. 编译器说我定义的Integer类型SqlDbType不支持,那么我该怎样设定?
3. 假设objCommand.Parameters("@backErr").Value=ParameterDirection.Output 已经成功,objCommand.Parameters("@backErr")成功的存放了返回值,那么假设我定义了一个Integer变量intBack,那么我这句代码:
intBack=objCommand.Parameters("@backErr").Value
是否正确?
4. 假设上面的问题全部通过,我运行存储过程的代码很简单:
objConn.Open()
objCommand.ExecuteNonQuery()
objConn.Close()
是否正确??

好了,就这么多问题,如果您学的是C#,也请给出代码,我看得懂,我学的是VB.net
谢谢大家!!
...全文
72 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bigrongshu 2002-08-26
  • 打赏
  • 举报
回复
1.改为SqlDbType.Int
2.调用存储过程的代码:
Try
myConnection.Open()
myCommand.ExecuteNonQuery()
'以下处理获得的返回值
ListBox1.Items.Add(myCommand.Parameters("@backErr").Value)
Catch
MessageBox.Show(Err.Description, "error", MessageBoxButtons.OK, MessageBoxIcon.Information)
Finally
myConnection.Close()
myCommand.Dispose()
End Try
3.你的存储过程如果设置return value,参数添加时应该按照如下顺序:
return value,input,output
  • 打赏
  • 举报
回复
Return??
我获得的返回值的代码:
objCommand.Parameters("@backErr").Value=ParameterDirection.Output
就是把返回的值放到@backErr里面,然后定义一个变量
Dim strReturn As String
strReturn=objCommand.Parameters("@backErr").Value.ToString()

这样的写法正确吗??
谢谢!!
bianbiancheng 2002-08-23
  • 打赏
  • 举报
回复
objCommand.Parameters.Add(New SqlParameter("@backErr",SqlDbType.Integer))
改为:
objCommand.Parameters.Add(New SqlParameter("@backErr",SqlDbType.Int,4))

你的最后的Return呢?
return (int)parameterBackErr.Value;【C#】

tacchan 2002-08-18
  • 打赏
  • 举报
回复
http://www.csdn.net/expert/topic/946/946704.xml?temp=.2960932

1,979

社区成员

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

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