c#调用sqlserver存储过程,怎样同时获取输入参数和记录集?
本来是想用户在输入用户ID后,一是在标签上显示姓名;再是在一个下拉框中显示该用户可以登录的部门。现在如果输入不存在的用户,标签上可以按要求显示”该用户不存在“;但输入存在...
本来是想用户在输入用户ID后,一是在标签上显示姓名;再是在一个下拉框中显示该用户可以登录的部门。现在如果输入不存在的用户,标签上可以按要求显示”该用户不存在“;但输入存在的用户,虽然下拉框正常填充了部门(获取了记录集),但标签就不显示了。
存储过程:
CREATE procedure [dbo].[user_logon]
@userid char(2),
@username nvarchar(50) output
as
declare @s varchar(1000)
begin
select @username=username,@s=userbm from shopuser where userid=@userid
if @username=null
begin
set @username='不存在该用户'
end
else
begin
set @s = 'select bmid +'''+' '+'''+bmmc from xsbm where bmid in ('+@s+')'
exec(@s)
end
end
GO
C#:
SqlCommand cmd = new SqlCommand("user_logon", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add( new SqlParameter("@shopuserid",SqlDbType.Char,2){Value=tbxUserID.Text.Trim()});
cmd.Parameters.Add( new SqlParameter("@shopusername",SqlDbType.NVarChar, 50){Direction=ParameterDirection.Output} );
SqlDataReader dr = cmd.ExecuteReader();
label5.Text = Convert.ToString(cmd.Parameters["@shopusername"].Value);//显示username
while (dr.Read())
{
cbxKuzi.Items.Add(dr.GetString(0)); //填充登录部门
} 展开
存储过程:
CREATE procedure [dbo].[user_logon]
@userid char(2),
@username nvarchar(50) output
as
declare @s varchar(1000)
begin
select @username=username,@s=userbm from shopuser where userid=@userid
if @username=null
begin
set @username='不存在该用户'
end
else
begin
set @s = 'select bmid +'''+' '+'''+bmmc from xsbm where bmid in ('+@s+')'
exec(@s)
end
end
GO
C#:
SqlCommand cmd = new SqlCommand("user_logon", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add( new SqlParameter("@shopuserid",SqlDbType.Char,2){Value=tbxUserID.Text.Trim()});
cmd.Parameters.Add( new SqlParameter("@shopusername",SqlDbType.NVarChar, 50){Direction=ParameterDirection.Output} );
SqlDataReader dr = cmd.ExecuteReader();
label5.Text = Convert.ToString(cmd.Parameters["@shopusername"].Value);//显示username
while (dr.Read())
{
cbxKuzi.Items.Add(dr.GetString(0)); //填充登录部门
} 展开
3个回答
展开全部
MSDN上面说过。想获取输出参数的值,必须要当前的读取器关闭,@parameter中才会有值。
所以,你的代码顺序需要调整。
{
cbxKuzi.Items.Add(dr.GetString(0)); //填充登录部门
}
dr.close();
conn.close();
//必须关闭之后,才能得到参数值。
label5.Text = Convert.ToString(cmd.Parameters["@shopusername"].Value);//显示username
这样应该就可以了。
展开全部
输出参数的话
cmd.Parameters[@shopusername].Value.ToString();就得到了。注意你using(sqlcmd){}这样别在他释放内存以后再去去变量要么就被GC回收了
至于输入参数的话
SqlParameter parameter = new SqlParameter("Description", SqlDbType.VarChar, 88);
parameter.Value = "garden hose";
这样赋值
cmd.Parameters[@shopusername].Value.ToString();就得到了。注意你using(sqlcmd){}这样别在他释放内存以后再去去变量要么就被GC回收了
至于输入参数的话
SqlParameter parameter = new SqlParameter("Description", SqlDbType.VarChar, 88);
parameter.Value = "garden hose";
这样赋值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
dr.NextResult()
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询