1

我試圖調用VS2012(SSDT)中的存儲過程調用,當調用是從PHP Web應用程序進行的。VS2012,遠程調試從PHP應用程序中調用的SQL Server過程

  • SQL Server和IIS在我的工作組 (即不是域)在不同的機器上運行
  • 我可以手動調試使用Visual Studio和SQL Server對象資源管理器從我的客戶端計算機遠程存儲過程
  • 沒有適當的防火牆規則(目前這兩臺機器的防火牆都被禁用)
  • 我正在運行VS,SQL Server服務和遠程調試器,它們都是相同的Windows用戶名(本例中爲「Administrator」)

如果我在VS中打開一個存儲過程,無論是從我的項目還是從SQL Server對象資源管理器中,並在該過程中設置斷點,我希望調試程序停止在我的斷點處,如果該過程從我的PHP web應用程序。

我的確看到了this post,但它沒有涉及VS2012的具體內容,也只能引用.NET應用程序。

這種調試甚至可以通過PHP應用程序進行調試嗎?

回答

0

你可以試着這樣做:
1)安裝遠程dubugging工具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)); 
    } 
+0

感謝您的建議。我已經完成了所有這些。看到我的原始文章 - 我仍然無法在運行應用程序時觸發斷點。 – Shoeless

+0

@Shoeless,呃,對不起。我不明白你。你可以在存儲過程中添加參數(比如'string source'或者'string source ='none''')並且在exec行中將它設置爲「php」,「myserver」或者其他參數。並在斷點處設置條件(source ==「php」)。因此,只有條件成立,你的對手纔會停止。 –

+0

感謝Dimitry,但問題與條件斷點無關。我想在VS的存儲過程中設置斷點,然後在瀏覽器中運行PHP應用程序,並在應用程序調用過程時在斷點處暫停。 – Shoeless

-1

我會從不同的方向走,嘗試從SQL Server事件探查器調試存儲過程, 你可以在那裏看到的程序調用堆棧,看看 的每個詞幹的結果是什麼,此外您可以添加打印到程序和評論的幾個部分(如沙漠中的獅子),但它會給你你的目標 也請參考這個問題,它可以幫助: http://social.msdn.microsoft.com/Forums/sqlserver/en-US/de789aac-8077-44f1-8a93-311a25368095/trace-stored-procedure-through-sql-profiler

+0

我對SQL Server Profiler非常熟悉。這並沒有解決在VS中調試存儲過程的問題。 – Shoeless