c#连接sql数据库 存储过程用了@@identity就出错
来源:百度知道 编辑:UC知道 时间:2024/05/30 21:11:04
alter proc asd
@name varchar(20) output
as
select @name=JManagerNane from jiaojie where JID=@@identity
我的C#代码调用过程中就不能返回输出参数
而
alter proc asd
@name varchar(20) output
as
select @name=JManagerNane from jiaojie where JID=1
就能返回
到底为什么啊!!!!!!!!!!在线等 大家救命啊
再SQL里面调用存储过程 都是正确的 都能返回正确的值
@@identity 是sql 数据库的全局变量 显示该表最后1个插入的自增列的值
我都说了 我的存储进程 是没问题的 可以运行的 都会返回我要的账户名 admin 但是用C#的代码 调用这个存储过程 就返回的是空值 而用数字代替@@identity 就能返回admin
cmd = new SqlCommand("asd",conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@name",SqlDbType.VarChar,20);
//输出参数
cmd.Parameters["@name"].Direction = ParameterDirection.Output;
conn.Open();
//注意一定要执行命令
cmd.ExecuteNonQuery();
没有给@@identity赋值啊
select @name=JManagerNane from jiaojie where JID=@@identity
//这时候@@identity 可能为空值 或,结果太多种了,
select @name=JManagerNane from jiaojie where JID=1
//这时候只有一种结果
我就觉得奇怪:你单独运行select @name=JManagerNane from jiaojie where JID=@@identity
有返回值吗?@name手动赋值.....
select @name=JManagerNane from jiaojie where JID=@@identity
我的C#代码调用过程中就不能返回输出参数
就是说你经过多次测试确定当前存储过程没问题,
如果确定不同情况下@@identity成功返回不同值了。
那就把你调用这条存储过程的代码发上来看看
嗯,同意mao0510 的。
不在一个是事务里面,是不能取到@@identity 的 。
所以通常是在执行INSERT后,才能取到identity。
否则不就乱了套了:假如多个连接同时执行Insert,那么,每个连接取回来的identity的值如何区分阿??
一种可能是你在SQL里调用的时候,都是用的同一个连接。但在C#里面可能有连接池或者其他的因素,不能用一个连接了,所以就出现问题。
准确的讲,你的思路是不正确的,identity必须和INSERT合用,不明白你这个存储过程干啥用的。。。是取最后一个注册的用户名么??
存储过程在数据库中是否可以运行?
是否有返回结果?
@@identity 是在一次会话中才能用的,所谓一次会话,而就是一次数据库打开-关闭的过程。如果你把连接关闭了,再打开再去查@@IDENTITY,就是null的。