1

データベースにデータを挿入し、同時に識別子を取得しようとしています。

識別子の型は Guid です。

私はすでにいくつかの解決策を試しました。

探していましたが、C# の Guid で動作するものは見つかりませんでした。

私が最後に試したのは次のようなものでした:

        dbAccess db = new dbAccess();
        SqlConnection con = db.openConnection();
        Guid retVal = Guid.Empty;
        try
        {
            SqlCommand cmd = new SqlCommand(@"insert into Comment(IdDiscussion,UserId,Description,DateTime)
                                            values(@IdDiscussion,@UserId,@description,@dateTime);
                                            set @ret=SCOPE_IDENTITY();", con);
            cmd.Parameters.AddWithValue("@IdDiscussion", discussionId);
            cmd.Parameters.AddWithValue("@UserId", userId);
            cmd.Parameters.AddWithValue("@description", comment);
            cmd.Parameters.AddWithValue("@dateTime", dateTime);
            SqlParameter retParameter = new SqlParameter("@ret", SqlDbType.UniqueIdentifier);
            retParameter.Direction = ParameterDirection.Output;
            cmd.Parameters.Add(retParameter);
            cmd.ExecuteNonQuery();
            retVal = (Guid)retParameter.Value;
        }
        catch (Exception e)
        {
            //doesn't really matter
        }
        db.closeConnection();
        return retVal;

この場合、次のエラーが表示されexecuteNonQuery(): "Operand type clash: numeric is incompatible with uniqueidentifier"ます。

役立つ提案はありますか?

4

2 に答える 2

1

SCOPE_IDENTITY() を使用して Guid 値を取得しようとしましたが、うまくいきませんでした。SQL 変数を宣言し、コマンド NEWID() で新しい GUID を生成してみてください。最後に、コマンド オブジェクトで ExecuteScalar メソッドを実行するこの変数で SELECT コマンドを実行します。

DECLARE @Id UNIQUEIDENTIFIER; SET @Id = NEWID();
INSERT INTO [tablename] ([Id], [Field1], [Field2]) VALUES (@Id, @Field1, @Field2);

通常、コマンドにパラメーターを追加する必要があります。

 cmd.Parameters.AddWithValue("@Field1", "Field 1 Value");
 cmd.Parameters.AddWithValue("@Field2", "Field 2 Value"));

したがって、値を実行して取得します。

var obj = cmd.ExecuteScalar();
Guid guid = (Guid)obj;
于 2015-07-13T02:36:55.707 に答える