我可以使用ODBC获取插入行的主键吗?

时间:2009-05-15 02:22:00

标签: .net sql odbc

在.NET中使用ODBC对象时,检索插入行的主键的最佳方法是什么?

例如(VB):

Dim command As OdbcCommand = gOdbcConn.CreateCommand()
command.CommandText("INSERT INTO auhinode (node_key, node_desc) VALUES (0, 'New Node')")
...
Dim result As Integer = command.ExecuteNonQuery()

我已经看到了其他一些建议here,但我想知道是否有特定于ODBC对象的解决方案?

编辑:我们使用ODBC的原因是因为我们支持3个不同的数据库 - SQL Server,Oracle,Informix。

2 个答案:

答案 0 :(得分:2)

你不会找到一种适用于所有3个数据库引擎的方法。它们各自有不同的方式来获取刚刚插入的行的ID。

select scope_identity();在sql server中。

在oracle中,您需要使用序列并自己在表中插入值。

Informix

因此,在您的代码中,您将不得不知道当前配置的数据库是否使用了所需的代码。

另一种选择是让存储过程执行插入操作,获取ID返回给您。然后您不需要对代码进行任何更改,代码调用返回ID的存储过程,但每个数据库引擎都有不同版本的存储过程,每个版本都具有相同的名称,并将它们包含在脚本中创建数据库。

答案 1 :(得分:1)

假设db是SQLServer数据库,您所要做的就是:

 SELECT SCOPE_IDENTITY();

另外,请勿使用:

 SELECT @@IDENTITY;

这是邪恶的。好吧,它并不是真的很邪恶,但是如果您有触发器或其他任何可以在数据库中插入另一条记录的内容,它可能无法返回您正在寻找的ID。