2

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

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

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

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

使用 PHP 应用程序甚至可以进行这种调试吗?

4

2 回答 2

0

您可以尝试执行以下操作:
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 和 Attach
就是我想的那样。

我用于测试的代码示例:

//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));
  }
于 2013-09-13T14:20:01.053 回答
-1

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

于 2013-09-15T06:39:07.117 回答