Essayez de persister Guid dans une base de données MySQL à partir de C# (.NET). La colonne MySQL est de type BINARY (16). Toute sugestion sur la façon de persister le guid et plus tard obtenir le guid de MySQL? Vous cherchez une réponse de code ici :-)Stockez GUID dans MySQL à partir de C#
Répondre
figured it out. Voici comment ...
schéma de base de données
CREATE TABLE `test` (
`id` BINARY(16) NOT NULL,
PRIMARY KEY (`id`)
)
Code
string connectionString = string.Format("Server={0};Database={1};Uid={2};pwd={3}", "server", "database", "user", "password");
Guid orgId = Guid.NewGuid();
Guid fromDb = Guid.Empty;
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
conn.Open();
using (MySqlCommand cmd = new MySqlCommand("INSERT INTO test (id) VALUES (?id)", conn))
{
cmd.Parameters.Add("id", MySqlDbType.Binary).Value = orgId.ToByteArray();
cmd.ExecuteNonQuery();
}
using (MySqlCommand cmd = new MySqlCommand("SELECT id FROM test", conn))
{
using (MySqlDataReader r = cmd.ExecuteReader())
{
r.Read();
fromDb = new Guid((byte[])r.GetValue(0));
}
}
}
Apparemment, la méthode GetGuid()
dans MySQL .NET Connector v5.2.6 + doit être fixé afin que vous puissiez use this example.
Vous voulez dire le connecteur MySQL .Net v5.2.6 +. Droite? – xraminx
1) Vous pouvez l'insérer comme @Tim Skauge. Mais tout en sélectionnant la version du connecteur .Net est important. Quand je l'avais utilisé v 5.2.1, je devais faire ce que:
using (MySqlCommand cmd = new MySqlCommand("SELECT id FROM test", conn))
{
using (MySqlDataReader r = cmd.ExecuteReader())
{
r.Read();
Guid id = (Guid)r[0];
}
}
Ici, le lecteur lit lui-même la valeur binaire .NET de type Guid
. Vous pouvez le voir si vous vérifiez le type de r[0]
. Mais avec la version plus récente, à savoir, 6.5.4, j'ai trouvé le type à byte[]
.. par exemple, il obtient la valeur binaire de db à son tableau d'octets correspondant. Alors vous faites ceci:
using (MySqlCommand cmd = new MySqlCommand("SELECT id FROM test", conn))
{
using (MySqlDataReader r = cmd.ExecuteReader())
{
r.Read();
Guid id = new Guid((byte[])r[0]);
}
}
Vous pouvez lire pourquoi est-il si here in documentation. L'alternative à lire le type Guid directement et non octet [] est d'avoir cette ligne: Old Guids=true
dans votre chaîne de connexion.
2) De plus, vous pouvez le faire tout de suite pour lire la valeur binaire en tant que chaîne en demandant à MySQL de faire la conversion, mais dans mon expérience, cette méthode est plus lente.
Insérer:
using (var c = new MySqlCommand("INSERT INTO test (id) VALUES (UNHEX(REPLACE(@id,'-','')))", conn))
{
c.Parameters.AddWithValue("@id", Guid.NewGuid().ToString());
c.ExecuteNonQuery();
}
ou
using (var c = new MySqlCommand("INSERT INTO test (id) VALUES (UNHEX(@id))";, conn))
{
c.Parameters.AddWithValue("@id", Guid.NewGuid().ToString("N"));
c.ExecuteNonQuery();
}
et sélectionnez:
using (MySqlCommand cmd = new MySqlCommand("SELECT hex(id) FROM test", conn))
{
using (MySqlDataReader r = cmd.ExecuteReader())
{
r.Read();
Guid id = new Guid((string)r[0]);
}
}
La seule chose que vous devez noter est que si vous insérez Guids par hex
méthode vous a pu le lire par l'approche unhex
. Si vous les insérez en utilisant la méthode ToByteArray()
de .NET, vous devez lire de la même manière. Sinon, vous obtiendrez des erreurs de lecture car .NET a une façon particulière de classer les octets en fonction de l'endianness. Catch something about it here in the context of inserting and reading Guids in .NET
- 1. Stockez les données dans mysql (data-migration)
- 2. Stockez les nouvelles de mysql dans php array!
- 3. Façons d'accéder à MySQL à partir de C#/WPF
- 4. C# guid et SQL uniqueidentifier
- 5. Stockez RSS dans DB
- 6. GUID semblable à YouTube
- 7. Génération simple de GUID en C
- 8. C#: Unicode à partir d'une chaîne avec MySQL
- 9. Stockez les informations relatives à l'utilisateur dans les applications .net
- 10. Appelez la commande mysql SOURCE à partir d'un programme C
- 11. C# Linq Guid Anonyme Type Problème
- 12. MySql: Sélection à partir de plusieurs tables
- 13. Composant temps mysql à partir de datetime
- 14. Création d'un nouveau Guid dans un extrait de code à l'aide de C#
- 15. Accès aux membres Guid en C#
- 16. Stockez les emplacements de mousedown
- 17. Wordpress: requête mysql pour renvoyer des messages à partir de mots clés spécifiques à categry?
- 18. C#: Comment stockez-vous des objets arbitraires dans un serveur SQL?
- 19. Nullable GUID
- 20. Comment définir un GUID en tant que paramètres de requête ADO à partir de Delphi?
- 21. Insertion de GUID dans SQL Server
- 22. Test à l'aide d'un guid ... comment définir la variable sur un Guid?
- 23. Trouver GUID dans la base de données
- 24. À partir .exe à partir de Visual C++ 2005 dll
- 25. Correction de GUID de projet
- 26. Comment obtenir le GUID de l'utilisateur à partir d'Active Directory en utilisant le protocole WinNT?
- 27. Insérer un GUID à chaque ligne existante
- 28. mise UniqueIdentifier de Guid dans LINQ, nulle exception de référence
- 29. Appel de C# à partir de IronRuby
- 30. Récupération de lignes dans une table de base de données MySQL à l'aide de MySQL C API et C++
vous ne devez pas le faire dans deux requêtes distinctes. Datareader seul suffirait à faire toutes les opérations et finalement retourner la valeur lue – nawfal
et de toute façon cela n'a pas fonctionné quand j'ai essayé. voir ce lien: http://stackoverflow.com/questions/10032071/how-to-get-uuid-generated-by-mysql-into-ac-sharp-variable/10174083#10174083 – nawfal
note sur: http: // stackoverflow.com/a/11236127/2241289 – user2241289