Is there anyway to iterate through a Dapper DynamicParameters object?

前端 未结 4 1540
刺人心
刺人心 2021-01-02 03:47

I need to make a generic logger to record certain insert/update statements so that my testers can verify the data being inserted is correct.

My first thought was tha

相关标签:
4条回答
  • 2021-01-02 04:19

    Just in case,

    var pmaster = new Dapper.DynamicParameters();                            
    SortedList l = new SortedList();
    l.Add("param1", object1);
    l.Add("param2", object2);
    l.Add("param3", object3);
    l.Add("param4", object4);
    
    foreach(var key in l.Keys)
    {
      var val = l[key];
      pmaster.Add(key.ToString(), val);
    }
    

    Worked for me.

    0 讨论(0)
  • 2021-01-02 04:22
        string ParametersToString(DynamicParameters parameters)
        {
            var result = new StringBuilder();
    
            if (parameters != null)
            {
                var firstParam = true;
                var parametersLookup = (SqlMapper.IParameterLookup)parameters;
                foreach (var paramName in parameters.ParameterNames)
                {
                    if (!firstParam)
                    {
                        result.Append(", ");
                    }
                    firstParam = false;
    
                    result.Append('@');
                    result.Append(paramName);
                    result.Append(" = ");
                    try
                    {
                        var value = parametersLookup[paramName];// parameters.Get<dynamic>(paramName);
                        result.Append((value != null) ? value.ToString() : "{null}");
                    }
                    catch
                    {
                        result.Append("unknown");
                    }
                }
    
            }
            return result.ToString();
        }
    
    0 讨论(0)
  • 2021-01-02 04:26

    One line with Linq:

    string.Join(", ", from pn in sprocParams.ParameterNames select string.Format("@{0}={1}", pn, (sprocParams as SqlMapper.IParameterLookup)[pn]))
    

    I'm using that to log with log4net:

    Log.InfoFormat("Exec {0} {1}", storedProc, string.Join(", ", from pn in sprocParams.ParameterNames select string.Format("@{0}={1}", pn, (sprocParams as SqlMapper.IParameterLookup)[pn])));
    
    0 讨论(0)
  • 2021-01-02 04:28

    Try:

                var sb = new StringBuilder();
                foreach (var name in p.ParameterNames)
                {
                    var pValue = p.Get<dynamic>(name);
                    sb.AppendFormat("{0}={1}\n", name, pValue.ToString());
                }
    
    0 讨论(0)
提交回复
热议问题