2014-02-27 89 views
0

我遇到了一個問題,我正在查看使用SqlXmlCommand對象從數據庫中獲取數據的遺留應用程序。有有正在使用的桌子,和.xsd文件哪些領域,它們之間的關係等,我們有是它工作的大部分時間,但不是所有的問題。我想知道是否有一種方法來檢查在Sql Server上實際運行的是什麼。我沒有安裝SQL分析器,因此選項不存在。視圖SQL服務器上的SqlXmlCommand.ExecuteCommand()

代碼如下:

SQLXML: error loading XML result (XML document must have a top level element.) 

我們認爲,是導致該XML不一些數據異常:

SqlXmlCommand xcmd = new SqlXmlCommand(DataAccess.OleDbConnectionString); 
xcmd.CommandType = SqlXmlCommandType.XPath; 
xcmd.SchemaPath = Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"myXsd.xsd")); 
xcmd.XslPath = Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, String.Format(@"myXsl.xsl", ReportType))); 
xcmd.CommandText = "id[@PK=$PK]"; 
SqlXmlParameter p = xcmd.CreateParameter(); 
p.Name = "@PK"; 
p.Value = Id; 

using (Stream s = xcmd.ExecuteStream()) { ... } 

這與錯誤的ExectureStream()炸燬生成正確,這就是爲什麼我們想看看究竟是什麼運行。

乾杯

+0

即使你沒有SQL事件探查器安裝,你仍然可以運行服務器端的痕跡或使用不擴展事件。設置其中一個痕跡可能有點棘手。一旦你完成了它,你一定會再次使用它很多次。我認爲這是值得的。 –

回答

1

你可以試試下面的兩個查詢,則可能需要調整它一點點,而是給你一個想法,首先爲您提供所有請求的列表,第二個會給你通過其請求ID的請求的細節(SESSION_ID)

SELECT * 
FROM sys.dm_exec_requests 

DBCC INPUTBUFFER (12345) 

雖然我個人寧願嘗試和第一調試C#應用程序,並查看與檢查什麼正在運行的困擾之前有什麼東西被髮送到從VS調試服務器SQL Server上

此外,DBCC INPUTBUFFER可能會給你像EXECUTE dbo.MyStoredProc 'params...',越挖越深,或以其他方式更簡單的查詢,您可以運行此

SELECT r.session_id, r.[status], r.command, t.[text] 
FROM sys.dm_exec_requests r 
CROSS APPLY sys.dm_exec_sql_text(r.[sql_handle]) t 
+0

嘿,謝謝你的回覆。當試圖在C#中調試代碼時,我們無法找出查詢的內容。沒有財產會告訴我們。這就是爲什麼我想要走這條路。我會讓你知道我找到了什麼。 – ncbl

+0

@ncbl我不是fam與SqlXmlCommand,但上面的查詢應該給你你需要從SQL Server端,只需要確保運行它,而你想要調查的查詢執行當然 – Jason

+0

感謝您的隊友,它最終做到了這一招。研究發現,這是產生在鑄造一個字符串轉換爲浮動查詢 - 但是當我們的PK了高於1萬條記錄它炸燬了。 – ncbl