ОК - это не совсем отладка, но вы можете установить точку останова в 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("'", "''");
}
}