美文网首页
存储过程执行前调用快速打印调试参数

存储过程执行前调用快速打印调试参数

作者: 吉凶以情迁 | 来源:发表于2023-11-15 11:19 被阅读0次

    我前面开发的存储过程转代码进行修改快速定位错误,但是
    参数是啥值定义还是很麻烦,结合这个,打印出来拷贝
    可以更方便的拿参数到数据库测试
    分为定义 ,设置值,和打印值,以及执行。
    全套

       }
    
            public void printExecSqlCommand(SqlCommand sqlCommand)
            {
                if (!RuntimeConfig.dev)
                {
                    return;
                }
                StringBuilder sb = new StringBuilder();
                sb.Append("--[DEBUG_DEFINE]\n");
    
                int i;
                i = 0;
    
                foreach (SqlParameter p in sqlCommand.Parameters)
                {
    
    
                    string paramName = p.ParameterName;
                    string paramValue = p.ParameterName;
    
                    /*         command.Parameters.Add(paramName, p.SqlDbType, p.Size);
                             command.Parameters[paramName].Value = p.Value;
                             command.Parameters[paramName].Direction = p.Direction;//两种写法都可以 但是会导致  如果取值是从SqlParameter[] Params里面取就会得到空
                       */
                    string value = p.Value + "";//传递null会报错,但是空字符串不会
                    string name = paramName.StartsWith("@") ? paramName : "@"+paramName;
                    sb.Append(@$"declare {name} varchar(200)='{value}'");
                    if (i != sqlCommand.Parameters.Count - 1)
                    {
                        sb.Append(";");
                    }
                    i++;
    
                }
                        sb.Append(";");
                sb.Append("\n--[SET]\n");
                i = 0;
                foreach (SqlParameter p in sqlCommand.Parameters)
                {
    
    
                    string paramName = p.ParameterName;
                    string paramValue = p.ParameterName;
    
                    /*         command.Parameters.Add(paramName, p.SqlDbType, p.Size);
                             command.Parameters[paramName].Value = p.Value;
                             command.Parameters[paramName].Direction = p.Direction;//两种写法都可以 但是会导致  如果取值是从SqlParameter[] Params里面取就会得到空
                       */
                    string value = p.Value + "";//传递null会报错,但是空字符串不会
                    string name = paramName.StartsWith("@") ? paramName : "@" + paramName;
                    sb.Append(@$"set {name}='{value}'");
                    if (i != sqlCommand.Parameters.Count - 1)
                    {
                        sb.Append(";");
                    }
                    i++;
    
                }
                    sb.Append(";");
                i = 0;
                sb.Append("\n--[PRITN_PARAM]\n");
                sb.Append("print ''");
                foreach (SqlParameter p in sqlCommand.Parameters)
                {
    
    
                    string paramName = p.ParameterName;
                    string paramValue = p.ParameterName;
    
                    string value = p.Value + "";//传递null会报错,但是空字符串不会
                    string name = paramName.StartsWith("@") ? paramName : "@" + paramName;
                    sb.Append("+");
                    sb.Append($"'{name}:'+");
                    if(p.SqlDbType==SqlDbType.NVarChar || p.SqlDbType == SqlDbType.VarChar)
                    {
                    sb.Append(@$"{name}");
                    }
                    else
                    {
                    sb.Append(  @$"CONVERT(VARCHAR(100), {name})");
                    //sb.Append(  @$"(CAST({name} AS NVARCHAR(30))");
                    }
                    sb.Append("+','"); 
                    i++;
    
                }
    
    
                sb.Append("\n--[EXECUTE]\n");
                sb.Append("\nDECLARE @RC int;\n");
                string procName = sqlCommand.CommandText.Contains(".") ? sqlCommand.CommandText : "[dbo].["+sqlCommand.CommandText+"]";
    
                sb.Append(@$" EXECUTE @RC ={procName} ");
                StringBuilder sbSelect = new StringBuilder();
                foreach (SqlParameter p in sqlCommand.Parameters)
                {
    
    
                    string paramName = p.ParameterName;
                    string paramValue = p.ParameterName;
    
                    string value = p.Value + "";//传递null会报错,但是空字符串不会
                    string name = paramName.StartsWith("@") ? paramName : "@" + paramName;
                    sb.Append(@$"{name}");
                    if(p.Direction==ParameterDirection.Output || p.Direction == ParameterDirection.InputOutput)
                    {
                        sb.Append(" out");
                        sbSelect.Append(name + ",");
                    }
                    if (i != sqlCommand.Parameters.Count - 1)
                    {
                        sb.Append(",");
                    }
                    i++;
    
                }
                sbSelect.Append("1");
                sb.Append(";");
                sb.Append(" select "+ sbSelect.ToString());
    
    
    
                Debug.WriteLine(sb.ToString());
    
            }
    

    相关文章

      网友评论

          本文标题:存储过程执行前调用快速打印调试参数

          本文链接:https://www.haomeiwen.com/subject/zpuswdtx.html