c# - 从最后一个条目中获取 id
问题描述
我需要将产品插入到 ProductDB 表中,同时从我刚刚插入的产品中获取 id,因此我可以在下一个查询中将其用作外键我一直在研究不同的方法,例如“select last_insert_rowid( )" 和 "SCOPE_IDENTITY()" 但我无法让它工作,我该如何让它工作
public static void SaveProduct(ProductModel product)
{
using (IDbConnection cnn = new SQLiteConnection(LoadConnectionString()))
{
cnn.Execute("INSERT INTRO ProductDB (Name, Price) VALUES (@Name, @Price);",
product);
string ForeignKey = "the id from the last entry from the query above";
cnn.execute("INSERT INTO ImageDB (Filename, Path, FK_Product) VALUES (@Filename, @Path," + ForeignKey + " )");
}
}
解决方案
在 SQL Server 中有 3 个函数(方法)用于从表中获取最后插入的 id。
IDENT_CURRENT()
- 返回给定表的最后插入的标识值。
SCOPE_IDENTITY()
- 返回插入到当前会话和当前范围内任何表的标识列中的最后一个标识值。
@@IDENTITY
- 返回当前会话中任何表中最后插入的标识值,无论范围如何。
我们需要 SCOPE_IDENTITY(),所以注意!!!
该函数必须在当前作用域中使用,该作用域位于insert
命令中。
例子:
declare
@new_id integer;
INSERT INTRO ProductDB (Name, Price) VALUES (@Name, @Price);
SET @new_id = SCOPE_IDENTITY();
推荐阅读
- c# - How to fix the display in DataGriView?
- r - Nested loop for regression over several columns in R
- xml - Understanding Various XML-related specs
- python - Use DataFrame to add values until certain amount, then store the remainder in a list
- openssl - Unable to redeploy the certificates post-expiry in openshift 3.11
- python - Complete a partial mesh and make it watetight
- sql - 在另一个表中查找与值最接近的匹配项
- ios - Value of type 'AuthDataResult' has no member 'uid' problem
- neo4j - Custom resolver with @cypher schema directive do not accept Date as an Input - GRANDStack
- c - Is there a way of limiting scanf in C?