存储过程如下:
create procedure check
@name nvarchar(20)=null, --用户名
@password nvarchar(10)=null, --密码
@result nchar(1) output
as
if exists( select * form table where name=@name and password=@password )
set @result='a'
else
set @result='b'
go --调试时为@result指定了一个null值
页面代码如下:
string result;//定义一个字符串变量接收输出参数
comm.Parameters.Add("@result",SqlDbType.Nchar,1);
comm.Parameters["@result"].Direction=ParameterDirection.Output;
......
//读取数据后
result=comm.Parameters["@result"].Value;
不知什么地方出问题,请指教!
create procedure check
@name nvarchar(20)=null, --用户名
@password nvarchar(10)=null, --密码
@result nchar(1) output
as
if exists( select * form table where name=@name and password=@password )
set @result='a'
else
set @result='b'
go --调试时为@result指定了一个null值
页面代码如下:
string result;//定义一个字符串变量接收输出参数
comm.Parameters.Add("@result",SqlDbType.Nchar,1);
comm.Parameters["@result"].Direction=ParameterDirection.Output;
......
//读取数据后
result=comm.Parameters["@result"].Value;
不知什么地方出问题,请指教!
解决方案 »
- 我有一个自动postback的下拉菜单,一个gridview。但是gridivew.rows.count为什么总是上一次的行数?
- 对asp.net应用和appdomain的几点疑惑
- 帮忙看一下,Web Deployment project生成之后发生错误
- 用。NET2003做树形目录。
- 如何改变服务器控件获得焦点的顺序问题?
- 大家帮忙看看这个存储过程哪里不对.
- 求教:关于下载链接的问题
- 菜鸟!
- "VS2013"对"TFS服务器",可以“签入”,但是不能获取最新版本??? Why?
- ASP vc JSP
- asp.net(C#)怎么调用数据库视图?
- 为什么我部署了Community Server后,全部的button事件全部失效?
comm.CommandText = "check";
comm.CommandType = CommandType.StoredProcedure //此句漏了沒,默認的是
谢谢提醒,以上两句都有呀,还是不行。感觉好像问题出在存储过程中?
急!
SqlDataReader dr=comm.ExecuteReader();
result=comm.Parameters["@result"].Value.ToString();
这样是可以的。
但是,如果
SqlDataReader dr=comm.ExecuteReader();
if(dr.Read())
{
result=comm.Parameters["@result"].Value.ToString();
......
}
则会跳过去,也就是这个存储过程好像不能用read()方法,真是奇怪。
哪位高人指点一下!
@name nvarchar(20)=null, --用户名
@password nvarchar(10)=null, --密码
@result nchar(1) output
as
DECLARE @str NVARCHAR(1);
if exists( select * form table where name=@name and password=@password )
BEGIN
SET @result='a'
SET @str ='a'
END
else
BEGIN
set @result='b'
SET @str ='b'
END
SELECT @str ;
GO原因是你必须在存储过程中返回一个结果集,才能用 Read() 读取
不知这样解释你能明白否
此句 错把from 写成 form check 与 table 都是关键字,以上代码,是通不过编译的,换成其它或是加上双引号
-----cityhunter172(寒羽枫)
原因是你必须在存储过程中返回一个结果集,才能用 Read() 读取
不知这样解释你能明白否
-----
不好意思,我还是不太明白。因为我一直觉得,用SqlDataReader dr=comm.ExecuteReader();这样本来就会返回一个结果集,不知道我的理解错在哪里?
而且有时候,如果是需要一个真正的结果集,只用SqlDataReader dr=comm.ExecuteReader();,然后在控件中绑定,会提示出错。好像是说,没有读取到内容什么的。
如
"Select 23 " --返回结果集,可用 comm.ExecuteReader();读取结果
"delete table1 " --仅返回受影响的行数,可用 comm.ExecuteNonQuery();得到该行数也就是说,comm.ExecuteReader();本身并不会会返回一个结果集
它只是执行 SQL 后读取由数据库产生的结果集,以下没有一条记录的也是结果集 select a,b from table1 where 1>2 因为它查询得出两个字段 a 与 b ,限于 1 > 2 永远为 false 才没有一条记录存在
刚刚看到,你的讲解直击问题的根本,使人有大梦初醒的感慨!
揭贴并为你喝彩!
'为存储过程添加访问参数,并指定为输出类型,用于获取存储过程的输出结果
Dim Result As New SqlParameter("@result", SqlDbType.NChar,1)
Result.Direction = ParameterDirection.Output
com.Parameters.Add(Result)