2014-12-14 3 views
1

SqlDataReader 개체가 있으면 관련 명령의 시간 초과를 가져 오려고합니다. 예를 들어 내가 만들려면이 사용하고 내 SqlDataReader : 런타임에서SqlDataReader에서 명령 개체에 액세스

SqlCommand myCommand = new SqlCommand(query, some_connection); 
    _reader = myCommand.ExecuteReader(); 

I이 사용하여 액세스 할 수있는 시각적 디버거를 사용하여 :

_reader.Command.CommandTimeout // Visual debugger 

아니, 난이 "속성"에 접근 할 수있는 방법 내 코드 (제 3 자 lib에 대한 속성으로 이것을 공개하고 싶습니다)?

상황 :

내가 그래서 사실 난 그냥 독자에 대한 액세스 권한, 세 번째 라이브러리에서 독자를 접근하고있다. 내 질문에 왜 내가 디버거에서 명령이 아니라 속성으로 액세스 할 수 이해하는 것입니다? 현장 뒤의 메커니즘은 무엇입니까, 일부 속성 확장, 반영?

+0

myCommand.CommandTimeout? –

답변

1
당신은이 internal 액세스로 설정되는 한, Command 재산 잡아 반사를 사용해야합니다

. 이것이 디버거에서 사용자에게 속성을 보여주기 위해 사용하는 것입니다.

PropertyInfo prop = _reader.GetType().GetProperty("Command", 
    BindingFlags.NonPublic | BindingFlags.Instance); 

DbCommand cmd = (DbCommand)prop.GetValue(_reader); 
int timeout = cmd.CommandTimeout; 

P. 당신은 실제로 제 3 자 구성 요소를 테스트하지 않아야합니다 - "나는 .NET 프레임 워크를 신뢰할 수 없어서 일을 처리 할 수 ​​없으므로 내부적으로하는 모든 것을 검사 할 것"이라고 말하는 것과 같습니다. 테스트하고 싶다면 유닛 테스트를 써드 파티 솔루션에 넣으십시오.

+0

나는 완전히 여기에 동의하지 않을 수도 있습니다. 닷넷 프레임 워크 :) – agstudy

0

SqlCommand 및 SqlConnection에 대한 외관 (래퍼)을 제안합니다. 그런 다음이 객체를 타사 라이브러리에 전달합니다.

public class MyOwnReader : IDisposable 
{ 
    bool isDisposed = false; 

    SqlConnection _connection; 
    SqlCommand _command; 


    // You can expose the whole command, or specific property of the command 
    public SqlCommand Command 
    { 
     get 
     { 
      return _command; 
     } 
    } 


    public MyOwnReader(string connectionString) 
    { 
     _connection = new SqlConnection(connectionString); 
     _connection.Open(); 
     _command = new SqlCommand(); 
     _command.Connection = _connection; 
     _command.CommandType = CommandType.StoredProcedure; //example initialization 
    } 

    public void Dispose() 
    { 
     if (!isDisposed) 
     { 
      _connection.Dispose(); 
      _command.Dispose(); 

      isDisposed = true; 
     } 
    } 

    public SqlDataReader ExecuteReader() 
    { 
     return _command.ExecuteReader(); 
    } 
} 
관련 문제