这是查询:
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 完全一样吗?