获取自增字段ID值,用DataTable.NewRow插入数据后

string sql = "SELECT * FROM HD_Section WHERE HD_CompanyID=" + CompanyID + " AND (HD_Parameter=@Parameter OR HD_MenuID=@MenuID)";
            try
            {
                DataRow dr;
                OleDbDataAdapter adapter = new OleDbDataAdapter(sql, con);
                adapter.SelectCommand.Parameters.Add("@Parameter", OleDbType.VarChar, 50).Value = Parameter;
                adapter.SelectCommand.Parameters.Add("@MenuID", OleDbType.Integer, 50).Value = MenuID;
                DataTable dt = new DataTable();
                adapter.Fill(dt);
                dr = dt.NewRow();
                dr["HD_Parameter"] = Parameter;
                dr["HD_Html"] = Html;
                dr["HD_CompanyID"] = CompanyID;
                if (dt.Rows.Count == 0) { dt.Rows.Add(dr); }
                OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);
                adapter.Update(dt); 

update后,我想取得刚刚插入行的ID值,请不要用INSERT; SELECT SCOPE_IDENTITY();来实现,因为我已经会了。

会不会再重新查询一遍。再查询一遍,如果用在淘宝双十一,岂不是ID相差1万,甚至1亿以上的差距了。

DataTable这种方式早就舍弃掉了,改用ORM了。

没有听说过ORM,我这是NET Framework,不是NET Core。

对于多用户系统,获取自增id几乎不可能
你可以将自增id改为如“guid+时间”的格式做主键,在插入前记录好这个主键值

补充,我说几乎不可能,是说比较费劲,呵呵
如果不怕整个系统死锁,可以在插入时先锁定整个表,插完读取出id,再解锁整个表

没有听过ORM?EF听过吗?用它,插入的时候就能返回id

新人,对EF确实没有研究,查了一下是框架,给个简单实例,如果比insert select复杂,我还是用我熟悉的技术,不过,我希望多一个技能。

这个方法不是我需要的,因为还要select一次,其实,我只需UNIQURE一个字段,查询到值就可以了,但是我不想重复查询,锁住数据库太伤性能了,不适用。

如果是自增ID的话也就是用SELECT SCOPE_IDENTITY();来获取了,否则就是自己生成不重复的主键值,因为是你生成的,在插入之前已经知道了,这个不需要再查询一次。

但从性能来讲多一次SELECT SCOPE_IDENTITY();,和INSERT语句一并执行,在大多数场景下并不会造成不良影响,毕竟不是谁的程 序都有12306的访问量,像企业的ERP,同时在线超过100人的都是少数。并且EF框架也是这么搞的,没什么大不了的。

SELECT LAST_INSERT_ID()
select @@IDENTITY;
SHOW TABLE STATUS  得出的结果里边对应表名记录中有个Auto_increment字段,里边有下一个自增ID的数值就是当前该表的最大自增ID.

是什么表?如果是用户表,可以根据账号查id,账号总不会重复吧?如果是没有唯一值的表,自动加一列,插入guid,再根据小蜜蜂论坛发帖机guid查,看情况吧,如果不是对性能要求太苛刻,多查一次没什么。

可惜不是用的ef ,不然就没这个问题了,ef可以入库后可以把对象在带出来,你就能知道他插入后的主键了。

可以自己维护自增id,比如新建自增序列,插入前,先获取自增id,再插入数据

1.如果不考虑并发冲突的话,可以再重新查询一遍刚才的记录。
2.如果考虑到并发冲突,那只能用SELECT @@IDENTITY();方法。

发布了74 篇原创文章 · 获赞 0 · 访问量 3074

猜你喜欢

转载自blog.csdn.net/netyou/article/details/104570351