C # guid et identifiant unique SQL
-
07-07-2019 - |
Question
Je souhaite créer un GUID et le stocker dans la base de données.
En C #, un guide peut être créé à l'aide de Guid.NewGuid (). Cela crée un entier de 128 bits. SQL Server possède une colonne uniqueidentifier qui contient un nombre hexadécimal énorme.
Existe-t-il un moyen approprié / préféré de faire en sorte que les assistants C # et SQL Server fonctionnent bien ensemble? (c’est-à-dire créer un guid en utilisant Guid.New () puis le stocker dans la base de données en utilisant nvarchar ou un autre champ ... ou créer un nombre hexadécimal du formulaire attendu par SQL Server par un autre moyen)
La solution
SQL attend le GUID sous forme de chaîne. Ce qui suit en C # retourne une chaîne que SQL est attendu.
"'" + Guid.NewGuid().ToString() + "'"
Quelque chose comme
INSERT INTO TABLE (GuidID) VALUE ('4b5e95a7-745a-462f-ae53-709a8583700a')
est ce que cela devrait ressembler à SQL.
Autres conseils
Voici un extrait de code montrant comment insérer un Guid à l'aide d'une requête paramétrée:
using(SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
using(SqlTransaction trans = conn.BeginTransaction())
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.Transaction = trans;
cmd.CommandText = @"INSERT INTO [MYTABLE] ([GuidValue]) VALUE @guidValue;";
cmd.Parameters.AddWithValue("@guidValue", Guid.NewGuid());
cmd.ExecuteNonQuery();
trans.Commit();
}
}
Vous pouvez passer une valeur C # Guid directement à une procédure stockée SQL en spécifiant SqlDbType .UniqueIdentifier
.
Votre méthode peut ressembler à ceci (à condition que votre seul paramètre soit le Guid):
public static void StoreGuid(Guid guid)
{
using (var cnx = new SqlConnection("YourDataBaseConnectionString"))
using (var cmd = new SqlCommand {
Connection = cnx,
CommandType = CommandType.StoredProcedure,
CommandText = "StoreGuid",
Parameters = {
new SqlParameter {
ParameterName = "@guid",
SqlDbType = SqlDbType.UniqueIdentifier, // right here
Value = guid
}
}
})
{
cnx.Open();
cmd.ExecuteNonQuery();
}
}
Voir aussi: uniqueidentifier
Stockez-le dans la base de données dans un champ avec un type de données uniqueidentifier.
// Create Instance of Connection and Command Object
SqlConnection myConnection = new SqlConnection(GentEFONRFFConnection);
myConnection.Open();
SqlCommand myCommand = new SqlCommand("your Procedure Name", myConnection);
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.Parameters.Add("@orgid", SqlDbType.UniqueIdentifier).Value = orgid;
myCommand.Parameters.Add("@statid", SqlDbType.UniqueIdentifier).Value = statid;
myCommand.Parameters.Add("@read", SqlDbType.Bit).Value = read;
myCommand.Parameters.Add("@write", SqlDbType.Bit).Value = write;
// Mark the Command as a SPROC
myCommand.ExecuteNonQuery();
myCommand.Dispose();
myConnection.Close();