sql中return和output有什么区别,在C#的C/S结构中咋处理返回值
SqlServer中return和output都能返回值,他两在使用上有什么区别!在C#中咋处理return和output的返回值,麻烦大家帮帮忙,能举个例子就最好了!麻...
SqlServer中return和output都能返回值,他两在使用上有什么区别!
在C#中咋处理return和output的返回值,
麻烦大家帮帮忙,
能举个例子就最好了!
麻烦大家, 谢谢
能写点代码举个例子吗
谢谢 展开
在C#中咋处理return和output的返回值,
麻烦大家帮帮忙,
能举个例子就最好了!
麻烦大家, 谢谢
能写点代码举个例子吗
谢谢 展开
4个回答
展开全部
--===================================================================
--创建存储过程——用户登录(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(); } //退出当前系统
--创建存储过程——用户登录(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(); } //退出当前系统
展开全部
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;
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;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
简单一点来说,return就是返回一个实例,你可以
datatable dt = (return值)
output则要求参数是已经实例化的对象,
datatable dt = new datatable()
之后才能
getdate(out datatable dt)
datatable dt = (return值)
output则要求参数是已经实例化的对象,
datatable dt = new datatable()
之后才能
getdate(out datatable dt)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
return是函数或者过程的返回值,output类似引用传值,直接修改实参
当需要多个返回值的时候可以使用out关键字使得值类型的参数得到修改
你可以参考bool isok = int.TryPrase(string str,out int i)这个函数来理解
函数返回true时,则转化成功,转化结果放到i里面,如果false,则不修改i。
当需要多个返回值的时候可以使用out关键字使得值类型的参数得到修改
你可以参考bool isok = int.TryPrase(string str,out int i)这个函数来理解
函数返回true时,则转化成功,转化结果放到i里面,如果false,则不修改i。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询