2011-10-27 3 views
8

CommandText가 실행 된 직후에 액세스 할 수있는 방법이 있습니까?매개 변수 대체 후 정확한 sql보기 C#

cmd = new OracleCommand(sql.ToString(), conn); 
cmd.Parameters.Add(new OracleParameter("@parm", parmValue)); 


OracleDataAdapter da = new OracleDataAdapter(cmd); 
DataTable dt = new DataTable(); 
da.Fill(dt); 

내가 알아야 할 것은 이미 SQL에 포함 parmValue의 값을 갖는 데이터베이스에서 실행되는 SQL 명령 문자열입니다 나는 다음과 같은 코드가 있습니다. 즉, 쿼리 내에서 문자열 "@parm"을 볼 수 없어야하지만 대신 값을 사용할 수 있어야합니다.

나중에 참조 할 수 있도록 로그 데이터베이스에서이 SQL을 푸시 할 수 있도록이 파일이 필요합니다.

미리 감사드립니다.

+2

SQL Server에 실제로 보내질 때조차도 매개 변수화됩니다. 변수는 선언 된 다음 쿼리 내에서 사용됩니다. –

+1

[SqlCommand-Object에서 생성 된 SQL 문을 얻는 방법] 가능한 복제본 (영문) (http://stackoverflow.com/questions/265192/how-to-get-the-generated-sql-statement-from-a) -sqlcommand-object) –

+0

실례합니다! 그것은 내 대답이었다! 내가 광산을 타이핑하는 동안 속미수를 찾았 어. – David

답변

1

오라클에 대해서는 잘 모르겠지만 RDBMS에서는 개인적으로이 작업을 수행 할 수 없습니다.

매개 변수를 가져와 결과 SQL 쿼리를 볼 때 필자는 코드에서 매개 변수 컬렉션을 반복적으로 실행하고 이름/값 쌍을 추출하여 결과 쿼리 또는 이와 유사한 내용을 기록합니다

StoredProc가 = InsertCallRecord : 매개 변수 : 우리의 오류 로깅 데이터베이스로, Custid = 651; CallId = 1234 PersonCalling = 데이브 ...

나는 단지 그것을 성능 때문에 오류 로그에이 작업을 수행 모든 호출에서 드래그 할 수 있지만 테스트 시나리오에서도 작동 할 수 있습니다. .

2

오라클이 이러한 방식으로 정확하게 작동하는지는 확실하지 않지만 대부분의 다른 DB 제공 업체에서는 매개 변수가있는 쿼리가 일반 텍스트 쿼리로 서버에 전송되지 않고 대신 적절한 매개 변수를 사용하여 실행 명령으로 전송됩니다 . 즉, DB 자체에서만 응용 프로그램 수준에서 대체가 발생하지 않습니다. 실제 명령이 서버에서 실행될 때이를 보려면 데이터베이스 자체의 추적/로그를보고 싶을 수 있습니다.