【发布时间】:2026-02-17 01:05:02
【问题描述】:
这里是查询:
string query = @"INSERT INTO session (PK_Id, user_id, login_time, machine_ip, machine_fingerprint)
VALUES (UUID(), @UId, @LogInTime, @MIp, @MFingerPrint);
";
现在我需要返回最后插入的 id,它是 MySQL 生成的 UUID。据我所知,UUID 没有 select_last_insert_id() 函数!我为 php 阅读过,您可以先将 UUID() 函数分配给一个变量,然后返回该值。但是如何在 C# 中实现呢?
类似这样,但不完全是:
string query = @"INSERT INTO session (PK_Id, user_id, login_time, machine_ip, machine_fingerprint)
VALUES (@UUID = SELECT UUID(), @UId, @LogInTime, @MIp, @MFingerPrint);
"; //how to do this here?
这是我的更多代码:
string query = @"INSERT INTO session (PK_Id, user_id, login_time, machine_ip, machine_fingerprint)
VALUES (@UUID = SELECT UUID(), @UId, @LogInTime, @MIp, @MFingerPrint);
";
try
{
if (_conn.State != ConnectionState.Open)
_conn.Open();
MySqlCommand cmd = new MySqlCommand(query, _conn);
cmd.Parameters.AddWithValue("@UId", Utility.usr.Id);
cmd.Parameters.AddWithValue("@LogInTime", DateTime.Now);
cmd.Parameters.AddWithValue("@MIp", GetMachineIP());
cmd.Parameters.AddWithValue("@MFingerPrint", GetHardwareFingerPrint());
var s= Convert.ToString(cmd.ExecuteScalar()); //this returns an empty string :(
//I need to get it to any .NET data type, string, or Guid or byte[] or anything.
但我需要 s 的这种数据类型在这样的查询中的另一个 WHERE 子句中使用:
string query = @"UPDATE session SET logout_time = @LogOutTime
WHERE user_id = @UId AND PK_Id = @SessionId";
try
{
if (_conn.State != ConnectionState.Open)
_conn.Open();
MySqlCommand cmd = new MySqlCommand(query, _conn);
cmd.Parameters.AddWithValue("@UId", Utility.usr.Id);
cmd.Parameters.AddWithValue("@SessionId", s);
cmd.Parameters.AddWithValue("@LogOutTime", DateTime.Now);
cmd.ExecuteScalar();
这里@"SessionId"是同一张表中的UUID字段。所以基本上,我怎样才能在 C# 中获取 MySQL varbinary 字段,以便我可以通过在另一个查询中指定 WHERE 来使用该类型进行更新?
在 MySQL 表中,UUID 字段是 varbinary(我希望看到一些不是另一个 php 链接或不要求我在数据库中切换到 char 数据类型的解决方案:))。
编辑:这里的问题是我们已经将 MySQL 生成的大量 UUID 添加到表中,所以我有点担心将 MySQL UUID 更改为 .NET Guid。如果这是唯一的解决方法,我会考虑的。只是这是我们第一次需要返回插入的 UUID 值,以便我可以在另一个查询中更新另一个时间点。
一个子问题:.NET Guid 与 MySQL UUID 完全一样吗?
【问题讨论】:
-
你试过
Guid类型吗? -
@PinnyM 在哪里试过?要将 Guid 添加到 UUID 字段中还是将插入的 UUID 作为 GUID?
-
要么 - 请参阅*.com/questions/742099/…
-
@PinnyM 我看过那个链接。这里的问题是我们已经在表中添加了大量由 MySQL 生成的 UUID,现在我认为切换到 Guid 是不行的。只是这是我们第一次需要返回值,以便我可以在另一个查询中更新。因此,除了解决方法之外,我问的问题没有解决方案吗?我会更新我的答案
-
我的意思是 C# 中的 UUID 表示是
Guid- 无需更改数据库。
标签: c# mysql .net-2.0 uuid varbinary