标题:问一个ASP简单的小问题!
只看楼主
孤独冷雨
Rank: 10Rank: 10Rank: 10
来 自:安徽滁州
等 级:贵宾
威 望:23
帖 子:1246
专家分:1909
注 册:2007-6-4
结帖率:82.61%
已结贴  问题点数:20 回复次数:13 
问一个ASP简单的小问题!
在SQL数据库中有ID,title,content,time,cid,我怎么能在添加一条数据时,并把这条数据的ID(主键)保存到Cid字段里,有这方面经验的兄弟告诉我一下。
搜索更多相关主题的帖子: ASP 
2009-11-06 13:57
aspic
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:51
帖 子:2258
专家分:8050
注 册:2008-2-18
得分:7 
添加 获取ID再修改该记录~
2009-11-06 14:37
外部三电铃
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:那一年
等 级:贵宾
威 望:55
帖 子:2004
专家分:7306
注 册:2007-12-17
得分:5 
用程序来解决的话就得按楼上说的了,添加的相关代码后面紧接着写获取ID的代码,一般select top 1 获取的就是自己刚添加的那个

那一年,苍井空还是处女
2009-11-06 14:41
孤独冷雨
Rank: 10Rank: 10Rank: 10
来 自:安徽滁州
等 级:贵宾
威 望:23
帖 子:1246
专家分:1909
注 册:2007-6-4
得分:0 
你说的方法和这个差不多,根本不行。
    set rsc=server.CreateObject("adodb.recordset")
            sqlc="select * from newscata"
            rsc.open sqlc,conn,1,3
            rsc.addnew
                rsc("title")= addtitle
                rsc("level") = alevel + 1
                rsc("rootid") = "|"
               rsc("type")=intType
            rsc.update
            newid=rsc("id")
            rsc.close
            
            rsc.open "select * from newscata where id="&newID,conn,1,3
            
                gid= rsc("id")
                groot = rsc("rootid")
                c_groot = replace(groot,"|",gid)
                rsc("rootid") =c_groot
            rsc.update   
               
            rsc.close
            set rsc=nothing


这里有男女系列成人用品,有时间兄弟们来看一看.
51za.
2009-11-06 14:44
aspic
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:51
帖 子:2258
专家分:8050
注 册:2008-2-18
得分:0 
因为你获取的方式根本不对 获取不到正确的
百度有很多关于mssql中获取刚添加记录的ID的文章
2009-11-06 14:47
aspic
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:51
帖 子:2258
专家分:8050
注 册:2008-2-18
得分:0 
转贴一个

程序代码:
用法:
conn.Execute("Insert INTO 表名(帐号,密码) VALUES('aaa',123)" )    '添加数据
set rs=conn.execute("Select SCOPE_IDENTITY()")  '获取新ID
newsid=rs(0)    'newsid为你表中的id
rs.close
'说明===========================!

'SCOPE_IDENTITY() 
'取得当前会话最新生成记录的所生成的自动id值ID
'当前会话修改的任意表~~标识ID(自动编号)

IDENT_CURRENT()
'任意会话修改的当前表的最新 标识id ,可以不是你的会话所修改的

@@IDENTITY
'当前回话,并包括SQL触发条件所修改的任意表 标识ID ,可能你的会话修改的返回的是
'SCOPE_IDENTITY() ,而@@IDENTITY可能因TRIGGER而增加新的修改记录,则@@IDENTITY返回后者,SCOPE_IDENTITY()返回你直接修改的

注意1:
select top 1、select max(id) 等在有上百人同时在操作的数据库将会是不准确的~~
可能你取得的id是别人添加的记录id而不是你自己的了!

注意2:
ACCESS不支持'SCOPE_IDENTITY()
ACCESS 使用rs.addnew ........rs.update 后然后直接读取该记录的自动编号
修改insert为 rs.addnew应该不废事
而且从使用SQL语句的安全角度考虑,应该使用rs.open来操作数据库
'不然对非合法数据将可能成为使用注入复合SQL语句的漏洞

MS SQL有三个SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY,最常用的就是这个SCOPE_IDENTITY()
2009-11-06 14:50
外部三电铃
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:那一年
等 级:贵宾
威 望:55
帖 子:2004
专家分:7306
注 册:2007-12-17
得分:5 
    set rsc=server.CreateObject("adodb.recordset")
            sqlc="select * from newscata"
            rsc.open sqlc,conn,1,3
            rsc.addnew
                rsc("title")= addtitle
                rsc("level") = alevel + 1
                rsc("rootid") = "|"
               rsc("type")=intType
            rsc.update
            newid=rsc("id") '这个根本取不到最新ID
            rsc.close
            
            rsc.open "select * from newscata where id="&newID,conn,1,3
            
                gid= rsc("id")  '假设上面的取到了最新的ID,下面这两行绿的就没必要了,做了重复的工作
                groot = rsc("rootid")
                c_groot = replace(groot,"|",gid)
                rsc("rootid") =c_groot
            rsc.update   
               
            rsc.close
            set rsc=nothing

那一年,苍井空还是处女
2009-11-06 14:52
yms123
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:209
帖 子:12488
专家分:19042
注 册:2004-7-17
得分:0 
id是自动编号?
2009-11-06 15:10
孤独冷雨
Rank: 10Rank: 10Rank: 10
来 自:安徽滁州
等 级:贵宾
威 望:23
帖 子:1246
专家分:1909
注 册:2007-6-4
得分:0 
ID是自动编号,因为做无限分类,以前用的是ACCESS数据库,没有问题,再改成SQL的出现这样的问题!

rootid字段,如果是一级目录就放本身ID(如果ID号是1,就存:1)号;二级就存,父目录ID加上本身ID号(如:1,2)到三目录时就存(1,2,3):

大家好ID:1       (rootid:1)
  |—你好 ID:2   (rootid:1,2)
      |-他好ID:3 (rootid:1,2,3)

早退ID:4          (rootid:4)
   |-早上ID:5    (rootid:4,5)
       |-早春ID:6 (rootid:4,5,6)
   

这里有男女系列成人用品,有时间兄弟们来看一看.
51za.
2009-11-06 15:26
gdk2006
Rank: 4
等 级:业余侠客
威 望:8
帖 子:928
专家分:270
注 册:2006-7-2
得分:0 
        '==更新目录Rootid,和SortId==
        set rsU=server.CreateObject("adodb.recordset")
        rsU.open "select * from [Newscata] order by Id desc",conn,1,3
            gid = rsU("Id")
            groot = rsU("rootid")
            c_groot = replace(groot,"|",gid)
            rsU("rootid") =c_groot
            rsU("SortId") =rsU("Id")
            rsU.update               
        rsU.close
        set rsU=nothing

程序员的悲哀如何找女朋友?
追女解决方案百度“让她着迷”!
2009-11-06 17:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-291247-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.926712 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved