2011-06-14 3 views
19

데이터베이스 서버에서 실행되는 (전체) SQL 문을 검색하는 방법이 있는지 알아 내려고하고 있습니다.
은 이미 뭔가를 발견,하지만 내가 좋아하는 것이 무엇인지 정확히하지 않습니다 : 내 경우LINQ to SQL 문 (IQueryable) with 매개 변수

IQueryable<SomeType> someQuery = ... 
string command = dataContext.GetCommand(query).CommandText; 

이 나에게 같은 명령 문자열 일 수 있습니다 : 데이터베이스에

SELECT TOP (50) [t0].[ID], .... 
FROM [dbo].[someTable] AS [t0] 
WHERE ([t0].[someColumn] IS NOT NULL) AND (([t0].[someColumn]) IN (@p0)) 

이 실행될 것 :

exec sp_executesql N'SELECT TOP (50) [t0].[ID], ... 
FROM [dbo].[someTable] AS [t0] 
WHERE ([t0].[someColumn] IS NOT NULL) AND (([t0].[someColumn]) IN (@p0, @p1))',N'@p0 int,@p1 int',@p0=401,@p1=201 

C# 코드에서이 '전체'문 (매개 변수 값도 검색)을 사용할 수 있습니까?

+0

이 비슷한 질문을 참조하십시오 : 이것은의 출력이 생성됩니다

var db = new DbContext(); IQueryable<Blog> query = db.Blog.Where(tt=> tt.Id > 100).OrderByDescending(tt=>tt.Id); var sqlString = query.ToString(); Console.WriteLine(sqlString); 

예를 들어
(재 : 생성 된 SQL을) 여기 http://stackoverflow.com/questions/265192/how-to -get-the-generated-sql-statment-from-a-sqlcommand-object 일부 통찰력을 제공 할 수도 있습니다. –

답변

8

Command를 얻으면 CommandText를 인쇄 한 다음 Parameters 컬렉션을 반복하고 모든 개별 매개 변수를 인쇄 할 수 있습니다.

디버그 모드에서도 동일한 작업을 수행하는 linq-to-sql debug visualizer이 있습니다.

가 일어나고으로 쿼리를 볼 수있는 정말 좋은 도구는 또한 생성 된 SQL 를 (이를 명령 텍스트를 포함하고 매개 변수) 로그인 할 때의 DataContext의 로그 속성을 사용할 수있는 Linq-to-sql profiler

5
(SqlCommand)dataContext.GetCommand(query) 

을 사용하면 Parameters 컬렉션에 액세스 할 수 있습니다.

+3

질문은 전체 SQL 문을 요구합니다. –

+0

@John SqlServer에 매개 변수화 된 쿼리를 보내는 경우에는 전체 SQL 문과 같은 것은 없으며 매개 변수의 자리 표시 자 및 해당 형식 및 값의 매개 변수가있는 CommandText가 먼저 전달됩니다. – cdel

+3

동의하지만, 귀하의 대답은 이런 종류의 유용한 문맥을 제공하지 않습니다. 좀 더 철저한 답을 주면 더 높은 화질로 시청자가 질문에 빠르게 묶을 수있게되고 downvote를 제거합니다. –

2

입니다.

그냥 YourDataContext.Log = SomeTextWriter으로 설정하십시오. 또한 당신이 IQueryable<T>의 인스턴스가있는 경우 생성 된 SQL 쿼리를 확인하고 .ToString() 메소드를 호출 할 수 see this post

+0

이렇게하면 모든 단일 명령문이 기록됩니다. 맞습니까? – TweeZz

+1

예, 해당 DataContext에 의해 생성 된 모든 명령문 (선택, 삽입, 업데이트 포함). – jaraics

1

, 파일 (Log = new StreamWriter(@"c:\temp\linq.log")) 또는 디버그 창에 쓸 수 있습니다.

SELECT [Extent1].[Id] AS [Id], 
[Extent1].[Title] AS [Title], 
[Extent1].[Author] AS [Author], 
[Extent1].[Text] AS [Text], 
[Extent1].[CreatedAt] AS [CreatedAt], 
[Extent1].[UpdatedAt] AS [UpdatedAt] 
FROM [dbo].[Blogs] AS [Extent1] 
WHERE [Extent1].[Id] > 100 
ORDER BY [Extent1].[Id] DESC 
+0

문제는 전체 문을 검색하는 방법 이었지만 솔루션에는 매개 변수가 포함되어 있지 않습니다. – ViRuSTriNiTy

+0

만약 당신이 어떤 변수를 사용한다면 변수를 출력 할 것입니다. 변수의 값을 인쇄하지는 않습니다. (그러나 이것은 간단합니다) –