有没有办法用C#检索最新插入的guid?
我试过这个:创建了一个表,其中字段ID为autonumber,replicationID和字段名称varchar(250)。
var command = myConnection.CreateCommand();
command.Connection.Open();
command.CommandText = "INSERT INTO Cars(Name) VALUES ('Pagani')";
command.ExecuteNonQuery();
command = context.Database.Connection.CreateCommand();
command.CommandText = "SELECT @@Identity";
Console.WriteLine(command.ExecuteScalar());
command.Connection.Close();
我得到的问题是:
Console.WriteLine(command.ExecuteScalar());
始终显示0
修改
要创建表,可以在C#OleDb连接上使用此语句(我认为从MS Access查询不起作用)
CREATE TABLE [Cars] (
[Id] guid not null DEFAULT GenGUID(),
[Name] text null
);
ALTER TABLE [Cars] ADD CONSTRAINT [PK_Cars_6515ede4] PRIMARY KEY ([Id])
答案 0 :(得分:6)
我知道这并不是你要求的,但让我建议一个可以解决你潜在问题的替代解决方案。
在C#中创建GUID并将其传递给insert:
${PROG1}
GUID是唯一的。它是由应用程序还是由Access数据库驱动程序生成并不重要。
此选项在所有方面都优于之后阅读GUID:
您只需要一次数据库访问。
代码较少。
它更容易。
如果不 需要知道GUID,您仍然可以省略INSERT中的GUID - 无需更改现有代码。
答案 1 :(得分:3)
如果SELECT @@IDENTITY
不适用于" ReplicationID"然后,自动编号字段检索新记录的这种值的最可能方法是使用Access DAO Recordset插入,如下所示:
// required COM reference:
// Microsoft Office 14.0 Access Database Engine Object Library
var dbe = new Microsoft.Office.Interop.Access.Dao.DBEngine();
Microsoft.Office.Interop.Access.Dao.Database db = dbe.OpenDatabase(
@"C:\Users\Public\Database1.accdb");
Microsoft.Office.Interop.Access.Dao.Recordset rst = db.OpenRecordset(
"SELECT [Id], [Name] FROM [Cars] WHERE FALSE",
Microsoft.Office.Interop.Access.Dao.RecordsetTypeEnum.dbOpenDynaset);
rst.AddNew();
// new records are immediately assigned an AutoNumber value ...
string newReplId = rst.Fields["Id"].Value; // ... so retrieve it
// the returned string is of the form
// {guid {1D741E80-6847-4CB2-9D96-35F460AEFB19}}
// so remove the leading and trailing decorators
newReplId = newReplId.Substring(7, newReplId.Length - 9);
// add other field values as needed
rst.Fields["Name"].Value = "Pagani";
// commit the new record
rst.Update();
db.Close();
Console.WriteLine("New record added with [Id] = {0}", newReplId);
产生
New record added with [Id] = 1D741E80-6847-4CB2-9D96-35F460AEFB19
答案 2 :(得分:1)
你可以尝试使用 OUTPUT
:
INSERT INTO myTable(myGUID)
OUTPUT INSERTED.myGUID
VALUES(GenGUID())
击> <击> 撞击> 你可以尝试这样:
string str1 = "INSERT INTO Cars(Name) VALUES ('Pagani')";
string str2 = "Select @@Identity";
int ID;
using (OleDbConnection conn = new OleDbConnection(connect))
{
using (OleDbCommand cmd = new OleDbCommand(str1, conn))
{
conn.Open();
cmd.ExecuteNonQuery();
cmd.CommandText = str2;
ID = (int)cmd.ExecuteScalar();
}
}
答案 3 :(得分:-1)
这项工作适用于Access 2013.但要小心 - 最后和第一个功能是特定于访问权限。
SELECT LAST(Id) FROM Cars