asp.net中怎样快速取得插入数据后自动编号的值?

数据库中有字段值为自动编号,在asp.net中怎样在插入(Insert into Table() values())数据的同时,或者插入数据后立即取得到该自动编号的值?
请给出access和sql Server的解决方法?谢谢!
解决方案 »
  1. 两种方法   
    1。CAST(IDENT_CURRENT('表名') AS BigInt)比较好用2。上条语句的新增@@IDENTITY
      

  2. sql server的系统变量@@IDENTITY就是上一次的自动编号值
      

  3. 请问 qqdao(青青岛):可以把CAST(IDENT_CURRENT('表名') AS BigInt)讲的具体点吗?谢谢!
    另外,在Access和SQL中完全一样吗?
      

  4. sql = "insert into tables(x,y) values(1,2) select @@IDENTITY"
    cm.ExecuteScalar()
      

  5. 其实,我觉得guid来编号不错。
      

  6. 谢谢!我在用@@时遇到了一个问题:
    我的是
    sql = "insert into tables(x,y) values(1,2)" +
          "select @@IDENTITY";
    在asp.net(C#)中提示我
    “异常详细信息: System.Data.OleDb.OleDbException: SQL 语句的结束位置缺少分号 (;)。”
    好像是@在C#中不能随便用的?
      

  7. 1> insert into t1521 (name) values ('fasdfas') ;select @@identity as id;
    2> go
    (1 行受到影响)
     id
     ----------------------------------------
                                           10(1 行受到影响)
    1>
      

  8. 在有触发时用@@IDENTITY显然是错的。
    在并发时IDENT_CURRENT('表名')也不对。
    所以应该用SCOPE_IDENTITY()才是比较好的选择。
      

  9. 我用了测试,insert into t1521 (name) values ('fasdfas') ;select @@identity as id;在Access中不能用的!请教在Access中怎么做?
      

  10. 请教谁可以给我一段这方面比较完整的C#代码,从Conn.Open()和后到Conn.Close()
      

  11. 我也求在 ACCESS方面的解!!!
      

  12. 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();
      

  13. access 不太好弄有个笨办法,就是先将数据插入到表中,然后在表中选出刚才的数据,取ID
      

  14. 获取数据库的自动编号字段值是很难的,但是还是有办法的:)
    下面分别就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的实现方法写出来,现在就先发这个吧:)
      

  15. 蠢办法啊,插入后
    select top 1 id from table order by id desc
      

  16. zhuxiaojun2002(atoz) 
    这种方法不行,
    同时插入数据的人多呢?
    取出来的就不是自己刚刚发的那个了:)
      

  17. zhuxiaojun2002(atoz) 
    这种方法不行,
    同时插入数据的人多呢?
    取出来的就不是自己刚刚发的那个了:)
    那你就在后面加上where userID = currentUserID 呗。
      

  18. sql = "insert into tables(x,y) values(1,2) select @@IDENTITY"
    cm.ExecuteScalar()
      

  19. insert ---------(略)
    select @@identity as c1 from table或者用存储过程:CREATE PROCEDURE spName
    //加入您的参数
    @id int output
    AS
    insert into table(参数) values(参数)
    select @id=@@identity RETURN
    GO返回的参数@id值就是您要的值。
      

  20. int   i   =   cmd.ExecuteScalar();   
    这个右边不是对象吗?
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值