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)

Était-ce utile?

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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top