71

GUIDを作成してDBに保存したいと思います。

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

C#とSQL ServerのGUIDを一緒にうまく機能させるための良い/好ましい方法はありますか?(つまり、Guid.New()を使用してGUIDを作成し、nvarcharまたはその他のフィールドを使用してデータベースに格納するか、SQL Serverが他の方法で予期している形式の16進数を作成します)

4

5 に答える 5

68

パラメータ化されたクエリを使用して 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();
        }
    }
于 2009-09-16T23:16:35.453 に答える
57

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

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

何かのようなもの

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

SQLでどのように表示されるかです。

于 2009-09-16T22:50:41.460 に答える
4

データ型が uniqueidentifier のフィールドのデータベースに格納します。

于 2009-09-16T22:51:01.927 に答える
1
// 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();
于 2012-04-11T09:13:28.970 に答える