コード例 #1
0
        GenerateExecuteParameters
        (
            string connectionString
            , string storeProcedureName
            , JToken inputsParameters
            , bool includeReturnValueParameter = true
        )
        {
            List <TDbParameter> result = null;
            var dbParameters
                = GetCachedParameters
                  (
                      connectionString
                      , storeProcedureName
                      , includeReturnValueParameter
                  );
            var jProperties = (JObject)inputsParameters;

            foreach (KeyValuePair <string, JToken> jProperty in jProperties)
            {
                DbParameter dbParameter = null;
                if
                (
                    dbParameters
                    .TryGetValue
                    (
                        jProperty.Key
                        , out dbParameter
                    )
                )
                {
                    var direction = dbParameter
                                    .Direction;
                    var dbParameterValue  = dbParameter.Value;
                    var includeValueClone = false;
                    if
                    (
                        dbParameterValue != DBNull.Value
                        &&
                        dbParameterValue != null
                    )
                    {
                        DataTable dataTable = dbParameterValue as DataTable;
                        if (dataTable != null)
                        {
                            includeValueClone = true;
                        }
                    }
                    var cloneDbParameter
                        = dbParameter
                          .ShallowClone
                          <TDbParameter>
                          (
                              OnExecutingSetDbParameterTypeProcess
                              , includeValueClone
                          );
                    var parameterValue =
                        OnExecutingSetDbParameterValueProcess
                        (
                            cloneDbParameter
                            , jProperty.Value
                        );
                    cloneDbParameter.Value = parameterValue;
                    if (result == null)
                    {
                        result = new List <TDbParameter>();
                    }
                    result
                    .Add(cloneDbParameter);
                }
            }
            foreach (var kvp in dbParameters)
            {
                var dbParameter = kvp.Value;
                if (result == null)
                {
                    result = new List <TDbParameter>();
                }
                if
                (
                    !result
                    .Exists
                    (
                        (x) =>
                {
                    return
                    (
                        string
                        .Compare
                        (
                            x.ParameterName
                            , dbParameter
                            .ParameterName
                            , true
                        ) == 0
                    );
                }
                    )
                )
                {
                    var direction = dbParameter.Direction;
                    if
                    (
                        direction != ParameterDirection.Input
                    )
                    {
                        if (result == null)
                        {
                            result = new List <TDbParameter>();
                        }
                        var cloneDbParameter =
                            dbParameter
                            .ShallowClone
                            <TDbParameter>
                            (
                                OnExecutingSetDbParameterTypeProcess
                            );
                        //if (direction == ParameterDirection.InputOutput)
                        //{
                        //    cloneDbParameter.Direction = ParameterDirection.Output;
                        //}
                        result.Add(cloneDbParameter);
                    }
                }
            }
            return(result);
        }