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)); //填充登录部门
}
展开
 我来答
handangaoyang
2013-08-02 · TA获得超过2242个赞
知道大有可为答主
回答量:2633
采纳率:88%
帮助的人:938万
展开全部

MSDN上面说过。想获取输出参数的值,必须要当前的读取器关闭,@parameter中才会有值。


所以,你的代码顺序需要调整。



{
          cbxKuzi.Items.Add(dr.GetString(0));  //填充登录部门
}

dr.close();
conn.close();
//必须关闭之后,才能得到参数值。
label5.Text = Convert.ToString(cmd.Parameters["@shopusername"].Value);//显示username

这样应该就可以了。

qinnan851
2013-08-02 · TA获得超过104个赞
知道小有建树答主
回答量:239
采纳率:0%
帮助的人:183万
展开全部
输出参数的话

cmd.Parameters[@shopusername].Value.ToString();就得到了。注意你using(sqlcmd){}这样别在他释放内存以后再去去变量要么就被GC回收了

至于输入参数的话
SqlParameter parameter = new SqlParameter("Description", SqlDbType.VarChar, 88);
parameter.Value = "garden hose";
这样赋值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
清水栞
2013-08-02 · TA获得超过1547个赞
知道小有建树答主
回答量:1538
采纳率:50%
帮助的人:991万
展开全部
dr.NextResult()
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式