sql中return和output有什么区别,在C#的C/S结构中咋处理返回值

SqlServer中return和output都能返回值,他两在使用上有什么区别!在C#中咋处理return和output的返回值,麻烦大家帮帮忙,能举个例子就最好了!麻... SqlServer中return和output都能返回值,他两在使用上有什么区别!
在C#中咋处理return和output的返回值,
麻烦大家帮帮忙,
能举个例子就最好了!
麻烦大家, 谢谢
能写点代码举个例子吗
谢谢
展开
 我来答
duaiyue000
2010-06-20 · 超过18用户采纳过TA的回答
知道答主
回答量:84
采纳率:0%
帮助的人:47.9万
展开全部
--===================================================================
--创建存储过程——用户登录(UserLogon)
--===================================================================
USE TestDemo
GO
IF OBJECT_ID ('dbo.proc_UserLogon', 'P') IS NOT NULL
DROP PROCEDURE dbo.proc_UserLogon;
GO
CREATE PROCEDURE proc_UserLogon
(
@UserID char(10), --用户号码
@UserPassword char(32), --用户密码
@UserRole nvarchar(10) OUTPUT, --用户权限
@StrError nvarchar(50) OUTPUT --错误处理
)
AS
--查询用户表并获取权限
SELECT @UserRole = UserRole FROM dbo.Users
WHERE UserID = @UserID AND UserPassword = @UserPassword
--存在该用户则立即返回
IF @@ROWCOUNT <> 0 BEGIN
SET @StrError = ''
RETURN
END
--用户不存在于用户表则继续查询会员信息表
SELECT * FROM dbo.MemberInfo
WHERE HY_ID = @UserID AND HY_Pwd = @UserPassword
--存在则立即返回,否则提示错误
IF @@ROWCOUNT <> 0 BEGIN
SET @StrError = ''
RETURN
END
ELSE BEGIN
SET @StrError = N'用户和密码不匹配,登录失败!'
END
GO

//添加的命名空间

using System.Data.SqlClient;

using System.Configuration;

/// <summary>

/// 【登录】按钮

/// </summary>

private void btnLogon_Click(object sender, EventArgs e)

{

if (this.txtUserID.Text.Trim() == "") MessageBox.Show("非法登录,请输入用户!");

else

{

SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnStr"]);

//创建命令对象,设置查询语句为登录的存储过程名称

SqlCommand cmd = new SqlCommand("proc_UserLogon", conn);

//指定命令的类型为存储过程

cmd.CommandType = CommandType.StoredProcedure;

//依次添加存储过程中的4个参数

cmd.Parameters.Add("@UserID", SqlDbType.Char, 10);

cmd.Parameters.Add("@UserPassword", SqlDbType.Char, 32);

cmd.Parameters.Add("@UserRole", SqlDbType.NVarChar, 8);

cmd.Parameters.Add("@StrError", SqlDbType.NVarChar, 50);

//依次为参数赋值

cmd.Parameters["@UserID"].Value = this.txtUserID.Text.Trim();

cmd.Parameters["@UserPassword"].Value = this.txtUserPwd.Text.Trim();

//参数@UserRole和@StrError为输出参数,必须明确指定

cmd.Parameters["@UserRole"].Direction = ParameterDirection.Output;

cmd.Parameters["@StrError"].Direction = ParameterDirection.Output;

try

{ conn.Open(); //打开数据库连接

cmd.ExecuteNonQuery(); //执行命令

}

catch (Exception ex) { MessageBox.Show(ex.Message); }

finally { conn.Close(); } //关闭数据库连接

//读取返回的错误

string StrError = cmd.Parameters["@StrError"].Value.ToString();

if (StrError == "") //判断存储过程执行的结果

{

string Role = cmd.Parameters["@UserRole"].Value.ToString();

qgMain qg = new qgMain();

qg.Uid = this.txtUserID.Text.Trim(); //传递用户号

qg.Pwd = this.txtUserPwd.Text.Trim(); //传递用户密码

qg.Role = Role; //传递权限

qg.Show();

this.Hide(); //隐藏登录窗口

}

else MessageBox.Show(StrError);

}

}

/// <summary>

/// 【退出】按钮

/// </summary>

private void btnExist_Click(object sender, EventArgs e)

{ Application.Exit(); } //退出当前系统
CloudPRose
2010-06-20 · TA获得超过5175个赞
知道大有可为答主
回答量:3175
采纳率:66%
帮助的人:888万
展开全部
Return 只能有一个,Output可以有多个。使用上Return 用 =来获取

EXECUTE @ReturnValue = prProcess
@param1 = @param1,
@param2 = @@param2 OUTPUT

C#代码上举例的话也就是Direction属性的差别,其他几乎相同。
Return的参数:
SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@ReturnValue";
parameter.Direction = ParameterDirection.ReturnValue;

Output的参数:
SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@OutputParam";
parameter.Direction = ParameterDirection.Output;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
depluin
2010-06-20 · TA获得超过3179个赞
知道大有可为答主
回答量:3378
采纳率:75%
帮助的人:2490万
展开全部
简单一点来说,return就是返回一个实例,你可以
datatable dt = (return值)
output则要求参数是已经实例化的对象,
datatable dt = new datatable()
之后才能
getdate(out datatable dt)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6eed2f8
2010-06-20 · TA获得超过5082个赞
知道大有可为答主
回答量:3423
采纳率:0%
帮助的人:3818万
展开全部
return是函数或者过程的返回值,output类似引用传值,直接修改实参
当需要多个返回值的时候可以使用out关键字使得值类型的参数得到修改
你可以参考bool isok = int.TryPrase(string str,out int i)这个函数来理解
函数返回true时,则转化成功,转化结果放到i里面,如果false,则不修改i。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式