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

2023-11-15  本文已影响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());

        }
上一篇下一篇

猜你喜欢

热点阅读