C#编程:SqlParameter paramOut=cmd.Parameters.Add("@RETURN_VALUE","");此句代码解释?

其中"cmd"是command对象的一个实例.关键我就是不清楚Add方法的那两个参数各代表什么?更奇怪的是第二个参数竞然是"",就更让我不理解了!我可以保证,在存储过程和... 其中"cmd"是command对象的一个实例.关键我就是不清楚Add方法的那两个参数各代表什么?更奇怪的是第二个参数竞然是" ",就更让我不理解了!我可以保证,在存储过程和.CS文件中没有关于"@RETURN_VALUE"的定义.

来龙去脉是这样的:
首先看一下存储过程的SQL语句:
CREATE PROCEDURE dbo.CreateUser
(@username varchar(50),
@password varchar(50)
)
AS
if exists
(select id from userinfo where username=@username)
return 1

insert into userinfo(username,password)values(@username,@password)
return 0
GO

再来看一下接收用户所输入注册信息的后台代码:
private void btnRegister_Click(object sender,System.EventArgs e)
{
string connstr="data source =localhost; user id =sa;password=;initial catalog=bookdata";
SqlConnection conn=new SqlConnection(connstr);
SqlCommand cmd=new SqlCommand("CreateUser",conn);
cmd.CommandTye=CommandType.StoreProcedure;
cmd.Parameters.Add("@username",tbUsername.Text);
cmd.Parameters.Add("@password",tbPassword.Text);
SqlParameter paramOut=cmd.Parameters.Add("@RETURN_VALUE"," ");
paramOut.Direction=ParameterDirection.ReturnValue;

try
{
conn.Open();
cmd.ExecuteNonQuery();
if((int)cmd.Parameters["@RETURN_VALUE"].Value==0)
{ Response.Write("<h3 color=red>注册成功!</h3>");}
else
{Response.Write("<h3 color=red>该用户名已注册!</h3>");}

}
catch(SqlException ex)
{
Response.Write("数据访问错误!\n");
Response.Write(ex.Message);
}
finally
{conn.Close();}
}

}

这就是完整的源程序,我想我也说的挺清楚的了吧,那么就请各位大虾指点一下喽!关键我就是不清楚Add方法的那两个参数各代表什么?更奇怪的是第二个参数竞然是" ",就更让我不理解了!在存储过程和.CS文件中有没有关于"@RETURN_VALUE"的定义,您也一目了然了.请指教!
在存储过程和.CS文件中有没有关于"@RETURN_VALUE"的定义,那它是哪来的呢?它是干什么的?
展开
 我来答
百度网友067037e6c6
2009-02-12 · TA获得超过143个赞
知道小有建树答主
回答量:275
采纳率:0%
帮助的人:226万
展开全部
SqlParameter paramOut=cmd.Parameters.Add("@RETURN_VALUE"," ");

paramOut.Direction=ParameterDirection.ReturnValue; 这个指明了 有输出参数

cmd.ExecuteNonQuery();
if((int)cmd.Parameters["@RETURN_VALUE"].Value==0)

判断 输出的参数是不是0

这个 @RETURN_VALUE 是sqlserver 在执行存储过程时自动生成的返回值参数
如果等于0 则代表 这个存储过程执行过程中没有异常并执行成功

你在sql server management studio 里执行一个存储过程的时候i你就会看见 下面的输出框里有一个 RETURN_VALUE 为 0 (如果执行成功的话)
百度网友6eed2f8
2009-02-12 · TA获得超过5082个赞
知道大有可为答主
回答量:3423
采纳率:0%
帮助的人:3776万
展开全部
这个存储过程需要两个输入参数(in),一个输出参数 (out)
类似与
str="Select count(*) from [table1] where username = @username and password =@password"
一下两句就是给这两个参数赋值
cmd.Parameters.Add("@username",tbUsername.Text);
cmd.Parameters.Add("@password",tbPassword.Text);

最后一个参数是类型的

//补充
这三个参数都是在存储过程里定义的,所以你可以打开CreateUser这个存储过程看看源代码就会发现这三个参数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
QB黑色的夜
2009-02-12 · 超过11用户采纳过TA的回答
知道答主
回答量:74
采纳率:0%
帮助的人:0
展开全部
在存储过程里你看不见是因为许多存储过程执行后都有一个默认的返回值,就像c语言中好多系统函数都有一个返回值一样,只不过c里面成功用1表示,失败0;存储过程0表示成功,1表示失败
代码里没有定义就有这个@RETURN_VALUE是因为他也是默认存在,不需要你定义,它正好对应接收存储过程的返回值
这个你知道这么用就行了,没必要深究
SqlParameterCollection.Add 方法 (String, Object)
注意:此 API 现在已过时。
一般都写成
cmd.Parameters.Add("@RETURN_VALUE",SqlDbType.Int);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lackyhuang
2009-02-12 · TA获得超过633个赞
知道小有建树答主
回答量:813
采纳率:0%
帮助的人:858万
展开全部
@RETURN_VALUE作为数据库存储过程返回的参数
整个存储过程是这样的意思,ADD是你传递给存储过程的参数,即传递了两个参数,一个用户名一个是密码,然后执行存储过程,如果已经存在用户所输入的用户名则返回return_value=1,后台程序则提示该用户已经注册了,如果在数据库中不存在用户所输入的用户名,则将用户输入的用户名和密码插入到数据库中,并返回return_value=0后台程序验证到其值为0时则提示注册成功。至于你说的RETUREN_VALUE没有声明,那是因为你还不了解存储过程是什么个意思,注意看这句cmd.Parameters["@RETURN_VALUE"].Value
还有什么问题??
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式