asp.net中怎样快速取得插入数据后自动编号的值?
2016-07-27 09:02
786 查看
数据库中有字段值为自动编号,在asp.net中怎样在插入(Insert into Table() values())数据的同时,或者插入数据后立即取得到该自动编号的值?
请给出access和sql Server的解决方法?谢谢!
两种方法
1。CAST(IDENT_CURRENT('表名') AS BigInt)比较好用2。上条语句的新增@@IDENTITY
sql server的系统变量@@IDENTITY就是上一次的自动编号值
请问 qqdao(青青岛):可以把CAST(IDENT_CURRENT('表名') AS BigInt)讲的具体点吗?谢谢!
另外,在Access和SQL中完全一样吗?
sql = "insert into tables(x,y) values(1,2) select @@IDENTITY"
cm.ExecuteScalar()
其实,我觉得guid来编号不错。
谢谢!我在用@@时遇到了一个问题:
我的是
sql = "insert into tables(x,y) values(1,2)" +
"select @@IDENTITY";
在asp.net(C#)中提示我
“异常详细信息: System.Data.OleDb.OleDbException: SQL 语句的结束位置缺少分号 (;)。”
好像是@在C#中不能随便用的?
1> insert into t1521 (name) values ('fasdfas') ;select @@identity as id;
2> go
(1 行受到影响)
id
----------------------------------------
10(1 行受到影响)
1>
在有触发时用@@IDENTITY显然是错的。
在并发时IDENT_CURRENT('表名')也不对。
所以应该用SCOPE_IDENTITY()才是比较好的选择。
我用了测试,insert into t1521 (name) values ('fasdfas') ;select @@identity as id;在Access中不能用的!请教在Access中怎么做?
请教谁可以给我一段这方面比较完整的C#代码,从Conn.Open()和后到Conn.Close()
我也求在 ACCESS方面的解!!!
sql server:
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();
access 不太好弄有个笨办法,就是先将数据插入到表中,然后在表中选出刚才的数据,取ID
获取数据库的自动编号字段值是很难的,但是还是有办法的:)
下面分别就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
zhuxiaojun2002(atoz)
这种方法不行,
同时插入数据的人多呢?
取出来的就不是自己刚刚发的那个了:)
zhuxiaojun2002(atoz)
这种方法不行,
同时插入数据的人多呢?
取出来的就不是自己刚刚发的那个了:)
那你就在后面加上where userID = currentUserID 呗。
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值就是您要的值。
int i = cmd.ExecuteScalar();
这个右边不是对象吗?
请给出access和sql Server的解决方法?谢谢!
解决方案 »
两种方法 1。CAST(IDENT_CURRENT('表名') AS BigInt)比较好用2。上条语句的新增@@IDENTITY
sql server的系统变量@@IDENTITY就是上一次的自动编号值
请问 qqdao(青青岛):可以把CAST(IDENT_CURRENT('表名') AS BigInt)讲的具体点吗?谢谢!
另外,在Access和SQL中完全一样吗?
sql = "insert into tables(x,y) values(1,2) select @@IDENTITY"
cm.ExecuteScalar()
其实,我觉得guid来编号不错。
谢谢!我在用@@时遇到了一个问题:
我的是
sql = "insert into tables(x,y) values(1,2)" +
"select @@IDENTITY";
在asp.net(C#)中提示我
“异常详细信息: System.Data.OleDb.OleDbException: SQL 语句的结束位置缺少分号 (;)。”
好像是@在C#中不能随便用的?
1> insert into t1521 (name) values ('fasdfas') ;select @@identity as id;
2> go
(1 行受到影响)
id
----------------------------------------
10(1 行受到影响)
1>
在有触发时用@@IDENTITY显然是错的。
在并发时IDENT_CURRENT('表名')也不对。
所以应该用SCOPE_IDENTITY()才是比较好的选择。
我用了测试,insert into t1521 (name) values ('fasdfas') ;select @@identity as id;在Access中不能用的!请教在Access中怎么做?
请教谁可以给我一段这方面比较完整的C#代码,从Conn.Open()和后到Conn.Close()
我也求在 ACCESS方面的解!!!
sql server:
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();
access 不太好弄有个笨办法,就是先将数据插入到表中,然后在表中选出刚才的数据,取ID
获取数据库的自动编号字段值是很难的,但是还是有办法的:)
下面分别就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
zhuxiaojun2002(atoz)
这种方法不行,
同时插入数据的人多呢?
取出来的就不是自己刚刚发的那个了:)
zhuxiaojun2002(atoz)
这种方法不行,
同时插入数据的人多呢?
取出来的就不是自己刚刚发的那个了:)
那你就在后面加上where userID = currentUserID 呗。
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值就是您要的值。
int i = cmd.ExecuteScalar();
这个右边不是对象吗?
相关文章推荐
- ASP.NET中iframe框架点击左边页面链接 右边显示链接页面内容
- Spring Boot Data JPA JpaSpecificationExecutor
- 使用PM2 启动ASP.NET Core应用程序
- Asp.Net Mvc 使用WebUploader 多图片上传
- 远程调试 ASP.NET MVC 项目
- asp.net web api long running task
- ASP.NET页面之间传递值的几种方式
- 树莓派 Learning 001 装机 ---之 1 安装NOOBS系统
- [译]Writing Custom Middleware in ASP.NET Core 1.0
- Entity Framework添加记录时获取自增ID值
- WebService的开发、部署、调用
- 使自己做的asp.net网页适应手机浏览
- ASP.NET Core开发-读取配置文件Configuration
- Raspberry pi2串口通信
- Asp.Net 之 二维码生成
- asp.net mvc 未找到路径“/favicon.ico”的控制器或该控制器未实现 IController
- asp.net TreeView递归循环子节点生成树形菜单实例
- asp.net实现上传图片时判断图片的模式GRB或CMYK的方法
- asp.net简单页面控件赋值实现方法
- asp.net core + angular2