2

呼び出しが PHP Web アプリから行われたときに、VS2012 (SSDT) 内からストアド プロシージャ呼び出しをデバッグしようとしています。

  • SQL Server と IIS がワークグループ (つまり、ドメインではない) の別のマシンで実行されています
  • Visual Studio と SQL Server オブジェクト エクスプローラーを使用して、クライアント コンピューターからリモート ストアド プロシージャを手動でデバッグできます。
  • ファイアウォール ルールが設定されていません (現在、両方のマシンのファイアウォールが無効になっています)
  • VS、SQL Server サービス、およびリモート デバッガーをすべて同じ Windows ユーザー名 (この場合は「管理者」) として実行しています。

プロジェクト内または SQL Server オブジェクト エクスプローラーから VS でストアド プロシージャを開き、そのプロシージャにブレークポイントを設定すると、そのプロシージャが 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 を選択し、アタッチ
します。これですべてだと思います。

テストに使用したコードのサンプル:

//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 からストアド プロシージャをデバッグしようとします。そこでプロシージャ コール スタックを確認し、プロシージャの各ステムの結果を確認できます。さらに、プロシージャに出力を追加してコメントをいくつか追加できます。部品 (砂漠のライオンのような) ですが、それはあなたが目指したものを提供します。また、この質問を参照して ください。 -8077-44f1-8a93-311a25368095/trace-stored-procedure-through-sql-profiler

于 2013-09-15T06:39:07.117 に答える