日期:2014-05-18  浏览次数:20808 次

请问更新数据库后。如何获得 自增ID 或 主键值 ?


ACC   数据库中

使用    

i.thisAdapter.Update(i.thisDataSet,   "ite ");

插入新数据后。。。


如何获得   自增ID   或   主键值   ?    

PHP中有一个函数可以传回最后一次使用   INSERT   指令的   ID。  

mysql_insert_id:   传回最后一次使用   INSERT   指令的   ID。  


不知道C#中是否有这样的方法。。。。。。


查询最大值的方法不是很准确,而且效率也不好。。




------解决方案--------------------
使用存储过程吧
ALTER PROCEDURE [dbo].[Deformity_ALHealingInfo_ADD]
@ALHealingInfo_ID int output,
@ALDeformity_ID int ,
@DeafAid int = null,
@ElectronCochlea int = null
AS
INSERT INTO Deformity_ALHealingInfo
(
[ALDeformity_ID],[DeafAid],[ElectronCochlea]
)
VALUES
(
@ALDeformity_ID,@DeafAid,@ElectronCochlea
)
SET @ALHealingInfo_ID = @@IDENTITY
数据连接层
parameters[14].Value = model.ALHealingInfo_ID;
parameters[14].Direction = ParameterDirection.Output;
就可以了

------解决方案--------------------
public static long GetRecentAutoIncreasedIdentity(IDBWrapper wrapper)
{
// 检测wrapper的 状态
if (wrapper.State != ConnectionState.Open)
{
// 此处直接用中文异常,因为这是给程序员看的异常消息
throw new Exception( "插入记录的方法与本方法必须使用同一个wrapper,并且保持连接打开状态。 ");
}

long lonValue = -1;

string strSql = String.Format( "SELECT @@Identity ");
object recentID = cmd.Execute(wrapper, strSql);
// 检测recentID是否空
if ( recentID!=null && recentID != DBNull.Value )
{
lonValue = Convert.ToInt64(recentID);
}

return lonValue;
}