web-dev-qa-db-ja.com

C#guidとSQL uniqueidentifier

GUIDを作成し、DBに保存します。

C#では、Guid.NewGuid()を使用してGUIDを作成できます。これにより、128ビット整数が作成されます。 SQL Serverには、巨大な16進数を保持するuniqueidentifier列があります。

C#とSQL ServerのGUIDを適切に連携させるための適切な方法はありますか? (つまり、Guid.New()を使用してGUIDを作成し、nvarcharまたは他のフィールドを使用してデータベースに保存するか、またはSQL Serverが他の方法で予期する16進数のフォームを作成します)

62
Daniel

SQLは、GUIDを文字列として想定しています。C#の次は、SQLが想定している文字列を返します。

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

何かのようなもの

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

sQLでどのように見えるかです。

51
Peter Oehlert

以下は、パラメーター化されたクエリを使用してGUIDを挿入する方法を示すコードスニピットです。

    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

SqlDbType.UniqueIdentifierを指定することにより、C#Guid値を直接SQLストアドプロシージャに渡すことができます。

メソッドは次のようになります(パラメーターが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();
    }
}

参照:SQL Serverの uniqueidentifier

7
canon

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