日期:2014-05-17  浏览次数:21052 次

高并发的时候,如何在c#中获取当前插入的自增ID号?
C# code

string sqla="insert into m_phone(a,b,c) values ('xx','xx','xx') "
 SqlHelper.ExcuteNonQurey(sqla, CommandType.Text, null);//执行添加数据
 string sqlt = "select top 1 SCOPE_IDENTITY() as num from m_phone";
int strpid = Convert.ToInt32(SqlHelper.ExcuteSclare(sqlt, CommandType.Text, null));  //获取刚才插入的id号


SqlHelper.ExcuteSclare(sqlt, CommandType.Text, null)获取到的结果一直都是NULL,上面确定已经insert 成功

在查询分析器中是可以获取的,在程序中不可以获取,会不会是不处于同一会话?

有什么办法在高并发的时候,获取当前插入的自增id号,只是当前的( select max是不行的)



------解决方案--------------------


System.Data.SqlClient.SqlDataAdapter _Comm = new System.Data.SqlClient.SqlDataAdapter("insert into m_phone(a,b,c) values ('xx','xx','xx') \r\n select @@IDENTITY",_Conn);
DataTable _Table =new DataTable();
_Comm.Fill(_Table);
MessageBox.Show(_Table.Rows[0][0].ToString());

自增还会有 DBnull 呢.

或SELECT MAX(ID) FROM m_phone 看看.
------解决方案--------------------
既然是高并发的,最好不要用select max 或者 select top这样的写法 
给你的m_phone表多增加一个myFlag字段
在做insert的时候生成一个N位的随机数字,一起插到这个表里的myFlag字段
然后select的时候用这个随机数来select

string strFlag = random..... //随机的6位数
string sqla="insert into m_phone(a,b,c,myFlag) values ('xx','xx','xx',strFlag ) ";
SqlHelper.ExcuteNonQurey(sqla, CommandType.Text, null);//执行添加数据
 string sqlt = "select * from m_phone where myFlag = '" + strFlag + "'";
------解决方案--------------------
insert into m_phone(a,b,c) values ('xx','xx','xx');select @@identity
------解决方案--------------------
高并发,还是添加字段,通过锁机制获取数据
实现比较好。