отладка sql хранимых процедур в VS 2008 из кода asp.net - PullRequest
4 голосов
/ 30 августа 2010

У меня есть SqlDataSource, который вызывает сохраненный процесс. Когда страница загружает Gridview, который использует этот SqlDataSource.

В настоящее время я хочу иметь возможность отлаживать сохраненный процесс.

Я не хочу отлаживать сохраненный процесс самостоятельно.

Я хочу посмотреть, какие значения фактически передаются в хранимый процесс и что он на самом деле делает.

Ответы [ 2 ]

4 голосов
/ 30 августа 2010

Использовать Sql Server Profiler . Вы можете прослушивать все запросы к вашему серверу sql, если у вас есть права.

ДОБАВЛЕНО:

«Профилировщик SQL без прав системного администратора» или «Этот» может помочь вам.

Проверьте ваш код на вашем собственном сервере sql (с правами sa), а не на производстве. Если он работает на вашем, он будет работать на производстве. В противном случае требуйте прав на трассировку, чтобы сделать вашу работу!

Итак, используйте локальный сервер (например, экспресс-издание или редакция для разработчиков) с правами ALTER TRACE или sysadmin, чтобы использовать SQL Server Profiler. Не используйте таблицу и не меняйте хранимую процедуру. Профилировщик отслеживает все обращения к серверу sql со значениями параметров. Просто лови эти звонки!

ДОБАВЛЕНО:

Я нашел ADO.NET Trace Logging . Я думаю, это то, что вы ищете. По моему мнению, этот трассировщик не так хорош в использовании, но в вашем случае, я думаю, он может помочь.

0 голосов
/ 13 марта 2012

ОК - это не совсем отладка, но вы можете установить точку останова в ASP.NET, где именно вы собираетесь вызывать базу данных (параметры команды готовы)немедленно открыть окно и вызвать этот метод

? DebugUtils.DebugStoredProc («Ваша хранимая процедура», CommandObj);это вернет вам строку, которую вы можете напрямую скопировать и выполнить в Query Analyzer.

public class DebugUtils
{
    public DebugUtils()
    {
        //
        // TODO: Add constructor logic here
        //




    }


    public static string DebugStoredProc(string spName, SqlCommand cmd)
    {
        //string szSPComand = string.Empty;
        string szSPComandFirstPart = "EXEC "+spName + "  ";
        string szSPComandSecondPart = string.Empty;
        string szDEBug = string.Empty;

        foreach (SqlParameter sqlparam in cmd.Parameters)
        {
            if (szSPComandSecondPart.Length > 0) { szSPComandSecondPart += " , "; szDEBug += " , "; }

            szSPComandSecondPart += string.Format("{0}={1}",sqlparam.ParameterName, ReturnParamToken(sqlparam));
            szDEBug += String.Format(" {0} ", sqlparam.ParameterName);
        }

        return szSPComandFirstPart + "  " + szSPComandSecondPart;
    }

    private static string ReturnParamToken(SqlParameter param)
    {
        string sToken = string.Empty;
        SqlDbType dbtype = param.SqlDbType;


        if (           dbtype == SqlDbType.Char 
                    || dbtype == SqlDbType.VarChar 
                    || dbtype == SqlDbType.Xml
                    || dbtype == SqlDbType.UniqueIdentifier     )
        {
            #region String - chars

            if (param.Value == DBNull.Value)
            {
                sToken = " null ";
            }
            else
            {
                sToken = "'" + FixQuotes(Convert.ToString(param.Value)) + "'";
            }

            #endregion

        }

        else if (
                        dbtype == SqlDbType.BigInt
                    || dbtype == SqlDbType.Decimal
                    || dbtype == SqlDbType.Float
                    || dbtype == SqlDbType.Int
                    || dbtype == SqlDbType.Money
                    || dbtype == SqlDbType.Real
                    || dbtype == SqlDbType.SmallInt
                    || dbtype == SqlDbType.SmallMoney
                    || dbtype == SqlDbType.TinyInt
                )
        {

            #region Numbers
            if (param.Value == DBNull.Value)
                    {
                        sToken = " null ";
                    }
                    else
                    {
                        sToken = Convert.ToString(param.Value);
                    }
            #endregion
        }

        else if (
                        dbtype == SqlDbType.DateTime
                    || dbtype == SqlDbType.DateTime2
                    || dbtype == SqlDbType.SmallDateTime
                    || dbtype == SqlDbType.Time
                    || dbtype == SqlDbType.Timestamp
               )
        {
            #region Dates
            if (param.Value == DBNull.Value)
                    {
                        sToken = " null ";
                    }
                    else
                    {
                        sToken = string.Format("'{0}'", Convert.ToString(param.Value));
                    }

            #endregion
        }
        else if (
                    dbtype == SqlDbType.Bit
                 )
        {

            #region BIT or BOOL

            if (param.Value == DBNull.Value)
            {
                sToken = " null ";
            }
            else
            {
                if (Convert.ToBoolean(param.Value) == true)
                {
                    sToken = "1";
                }
                else
                {
                    sToken = Convert.ToString(param.Value);
                }

            }

            #endregion

        }
        else if (
                        dbtype == SqlDbType.Binary

                    || dbtype == SqlDbType.Date

                    || dbtype == SqlDbType.DateTimeOffset

                    || dbtype == SqlDbType.Image

                    || dbtype == SqlDbType.NChar
                    || dbtype == SqlDbType.NText
                    || dbtype == SqlDbType.NVarChar



                    || dbtype == SqlDbType.Structured
                    || dbtype == SqlDbType.Text

                    || dbtype == SqlDbType.Udt

                    || dbtype == SqlDbType.VarBinary
                    || dbtype == SqlDbType.Variant
             )
        {
             if (param.Value == DBNull.Value)
            {
                sToken = " null ";
            }
            else            
            {
                sToken = string.Format("UNKNOWN DATATYPE - NO HANDLER FOUND for @param : {0} of datatype:{1} ", param.ParameterName, Convert.ToString(dbtype.ToString()));
            }


        }

        return sToken;
    }

    private static string FixQuotes(string str)
    {
        return str.Replace("'", "''");
    }


}
...