sql = "insert into tables(x,y) values(1,2) select @@IDENTITY"
cm.ExecuteScalar()
insert ---------(略)
select @@identity as c1 from table或者用存储过程:CREATE PROCEDURE spName
//加入您的参数
@id int output
AS
insert into table(参数) values(参数)
select @id=@@identity RETURN
GO返回的参数@id值就是您要的值。
1。CAST(IDENT_CURRENT('表名') AS BigInt)比较好用2。上条语句的新增@@IDENTITY
另外,在Access和SQL中完全一样吗?
cm.ExecuteScalar()
我的是
sql = "insert into tables(x,y) values(1,2)" +
"select @@IDENTITY";
在asp.net(C#)中提示我
“异常详细信息: System.Data.OleDb.OleDbException: SQL 语句的结束位置缺少分号 (;)。”
好像是@在C#中不能随便用的?
2> go
(1 行受到影响)
id
----------------------------------------
10(1 行受到影响)
1>
在并发时IDENT_CURRENT('表名')也不对。
所以应该用SCOPE_IDENTITY()才是比较好的选择。
SqlConnection conn = new SqlConnection(ConnectionString);conn.open();sql = "Insert Into table1(t1,t2) value(1,2);select @@IDENTITY";SqlCommand cmd = new SqlCommand(sql);cmd.Connection = conn;int i = cmd.ExecuteScalar(); //i就是你要的cmd.Dispose();conn.close();conn.Dispose();
下面分别就sql server与access讨论实现:
一、sql server的实现方案
A、原理篇
我们应该了解到,存储过程和输出参数的一种常见用法就是“提供了一种简单的方法来获取标识值”。
在使用sql server来插入一行记录时,该记录会自然含有一个标识字段。当然,我们要明白的是这个标识字段其实指的是一个数字字段,每次sql server插入一条记录时就会给这个字段赋值,赋值时按照顺序号加上一个值(通常是1)。尤其要注意的是:当我们把一条记录添加到含有标识字段的表中时,不能自行为这个标识字段赋值。
标识值相当与access中的自动编号字段,它主要是为了给每个记录赋予一个唯一的键。
在asp.net中发现sql server的一条新插入记录的标识值是需要一点小窍门的。比如说在ado.net更新了数据库表以后,标识值就不能在任何标准的ado.net对象中自动出现。也就是楼主要寻求解决方法的原因了。
B、解决思路
我们要利用存储过程和输出参数提供的功能来实现之。
C、实现方法
首先,假设我们把数据库中有一个存储过程的名字为insertmbr,在这个存储过程的第一行代码中不仅含有我们要运行的insert语句,还要在第二行处包含以下语句:
SET @Identity=@@Identity
说明:@@Identity系统变量就是用来记录标识值的,将它赋予@Identity变量上就能输出到asp.net页面中了。
然后在asp.net页中,编写代码如下:
.
.
.
//conClsf变量代表一个数据库连接
cmdMbrs = New SqlCommand("insertmbr",conClsf)
cmdMbrs = CommandType = CommandType.StoredProcedure
cmdMbrs.Parameters.Add("@identity")
cmdMbrs.Parameters("@identity").Direction = ParameterDirection.Output
cmdMbrs.ExecuteNOnQuery
intIdentity = cmdMbrs.Parameters("@identity").Value 此时,intIdentity变量中就是新插入记录的标识值。
时间问题,我待会就把access的实现方法写出来,现在就先发这个吧:)
select top 1 id from table order by id desc
这种方法不行,
同时插入数据的人多呢?
取出来的就不是自己刚刚发的那个了:)
这种方法不行,
同时插入数据的人多呢?
取出来的就不是自己刚刚发的那个了:)
那你就在后面加上where userID = currentUserID 呗。
cm.ExecuteScalar()
select @@identity as c1 from table或者用存储过程:CREATE PROCEDURE spName
//加入您的参数
@id int output
AS
insert into table(参数) values(参数)
select @id=@@identity RETURN
GO返回的参数@id值就是您要的值。
这个右边不是对象吗?