web-dev-qa-db-fra.com

C # guid et identifiant unique SQL

Je veux 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 guides 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 de la forme attendue par SQL Server par un autre moyen)

62
Daniel

SQL attend le GUID sous forme de chaîne. Ce qui suit dans C # renvoie une chaîne que Sql attend.

"'" + Guid.NewGuid().ToString() + "'"

Quelque chose comme

INSERT INTO TABLE (GuidID) VALUE ('4b5e95a7-745a-462f-ae53-709a8583700a')

est ce que cela devrait ressembler à SQL.

51
Peter Oehlert

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();
        }
    }
63
DLKJ

Vous pouvez passer une valeur Guid C # 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 de SQL Server

7
canon

Stockez-le dans la base de données dans un champ avec un type de données uniqueidentifier.

4
Jay Riggs
// 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();
0
Sunandan Dutt