VS2012,远程调试从PHP应用程序调用的SQL Server过程


VS2012, Remote debugging SQL Server procedures called from a PHP app

当从PHP web应用程序进行调用时,我正在尝试从VS2012(SSDT)中调试存储过程调用。

  • SQL Server和IIS在我的工作组中的另一台计算机上运行(即不是域)
  • 我可以使用Visual Studio和SQL Server对象资源管理器从客户端计算机手动调试远程存储过程
  • 没有防火墙规则(两台计算机的防火墙目前都已禁用)
  • 我使用相同的Windows用户名(在本例中为"Administrator")运行VS、SQL Server服务和远程调试器

如果我从项目中或从SQL Server对象资源管理器打开VS中的存储过程,并在该过程中设置断点,如果从我的PHP web应用程序调用该过程,我希望调试器在我的断点处停止。

我确实看到了这篇文章,但它并没有涉及VS2012的细节,也只是引用了.NET应用程序。

用PHP应用程序进行这种调试可能吗?

您可以尝试执行以下操作:
1) 将远程调试工具设置为MSSQL Server计算机:
http://msdn.microsoft.com/en-us//library/bt727f1t.aspx
2) 在MSSQL Server计算机上运行远程调试监视器:
http://msdn.microsoft.com/en-us//library/xf8k2h6a.aspx
3) 打开数据库项目并选择:调试-附加到进程
4) 浏览,选择您的服务器
5) 选择sqlservr.exe并附加
我想,仅此而已。

我用于测试的代码示例:

//StoredProcedure sample
public partial class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void StoredProcedure1(string source)
    {
        SqlDataRecord tempRecord = new SqlDataRecord(new SqlMetaData[] { new SqlMetaData("test", SqlDbType.VarChar, 50) });
        tempRecord.SetString(0, "teeeest");
        SqlContext.Pipe.Send(tempRecord); // here breakpoint with source=="php" condition
    }
};
//PHP code sample
<?php
$connectionInfo = array( "Database"=>"db", "UID"=>"sa", "PWD"=>"**************");
$link = sqlsrv_connect('server', $connectionInfo);
if( $link === false )
{
     echo "Could not connect.'n";
     die( print_r( sqlsrv_errors(), true));
}
$sql = " { call StoredProcedure1 ( ? ) } ";
  $param1 = 'php';
  $params = Array(
    Array(&$param1, SQLSRV_PARAM_IN)
  );
  $stmt = sqlsrv_query($link,$sql,$params);
  if ($stmt===false) {
    // handle error
    echo('1');
    print_r(sqlsrv_errors(),true);
  } else {
    print_r($stmt);
    sqlsrv_fetch( $stmt );
    print_r(sqlsrv_get_field( $stmt, 0));
  }

我将从不同的方向出发,尝试从SQL Server Profiler中调试存储过程,您可以在那里看到过程调用堆栈,并查看过程的每个词干的结果此外,你可以在程序中添加指纹,并评论一些部分(比如沙漠中的狮子),但它会给你带来你的目标也请参考这个问题,它可以帮助:http://social.msdn.microsoft.com/Forums/sqlserver/en-US/de789aac-8077-44f1-8a93-311a25368095/trace-stored-procedure-through-sql-profiler