高并发的时候,如何在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
------解决方案--------------------高并发,还是添加字段,通过锁机制获取数据
实现比较好。