2014-02-27 1 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

를 실행할 수 있습니다 확장 된 이벤트. 이러한 흔적 중 하나를 설정하는 것은 약간 까다로울 수 있습니다. 당신이 그것을 한 번하면 확실히 여러 번 다시 사용할 것입니다. 나는 그것이 노력할만한 가치가 있다고 생각한다. –

답변

1

첫 번째는 당신에게 모든 요청의 목록을 제공합니다, 당신은 그것을 조금 조정할해야 할 수도 있습니다,하지만 당신에게 아이디어를주고, 두 개의 질의 아래를 시도 할 수 있습니다, 두 번째는 당신에게 줄 것이다 그 요청 ID의 요청의 세부 (SESSION_ID)

SELECT * 
FROM sys.dm_exec_requests 

DBCC INPUTBUFFER (12345) 

나는 개인적으로 오히려 시도하고 처음 C#을 응용 프로그램을 디버깅하고 실행 무엇 확인과 함께 귀찮게하기 전에 VS 디버거에서 서버로 전송되고 있는지 볼 것이지만 SQL 서버에

또한, DBCC INPUTBUFFEREXECUTE dbo.MyStoredProc 'params...'처럼 당신에게 뭔가를 줄 수도 깊이 파고, 또는 SQL 프로파일 러는 여전히 서버 측 트레이스 또는 사용을 실행할 수있는 설치 당신이하지 않더라도, 그렇지 않으면 더 간단한 쿼리,이

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 SqlXmlCommand에 익숙하지 않지만 위의 쿼리를 통해 SQL Server 측에서 필요한 것을 제공해야합니다. 조사하려는 쿼리가 물론 실행되는 동안 실행해야합니다. – Jason

+0

감사합니다. 친구, 결국 트릭을 했어. 생성 된 쿼리가 문자열을 float로 캐스팅하는 것으로 밝혀졌습니다. 그러나 PK가 1 백만 개가 넘는 레코드를 얻었을 때 – ncbl