Architect's Log

I'm a Cloud Architect. I'm highly motivated to reduce toils with driving DevOps.

SqlCommandの戻り値パラメータ追加/値取得を拡張メソッドで実装する

SqlCommandの戻り値パラメータ追加/値取得を拡張メソッドで実装してみます。

using System;
using System.Data;
using System.Data.SqlClient;

namespace DataAccess {
    public static class SqlParameterCollectionExtensions {
        /// <summary>
        /// 戻り値のパラメータを追加します。
        /// </summary>
        /// <remarks>戻り値のパラメータの値は<see cref="ReturnValue"/>メソッドで取得します。</remarks>
        /// <param name="self">SqlParameterCollectionのインスタンス。</param>
        /// <returns>追加されたSqlParameterインスタンス。</returns>
        public static SqlParameter AddReturnParameter(this SqlParameterCollection self) {
            SqlParameter p = new SqlParameter();
            p.SqlDbType = SqlDbType.Int;
            p.Direction = ParameterDirection.ReturnValue;
            return self.Add(p);
        }

        /// <summary>
        /// 戻り値のパラメータの値を取得します。
        /// </summary>
        /// <param name="self">SqlParameterCollectionのインスタンス。</param>
        /// <returns>戻り値のパラメータの値。</returns>
        public static int ReturnValue(this SqlParameterCollection self) {
            foreach (SqlParameter p in self) {
                if (p.Direction != ParameterDirection.ReturnValue) continue;
                return (int)p.Value;
            }

            throw new InvalidOperationException("このSqlCommandには戻り値のパラメータがありません。");
        }
    }
}