クエリは次のとおりです。
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() 関数はありません!! そして、最初に UUID() 関数を変数に割り当ててから、その値を返すことができるphpを読みました。しかし、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 とまったく同じですか?