메서드에서 OleDbDataReader 개체를 반환 할 수 있습니까?

올리버 가이

함수에서 OleDb.OleDbDataReader 개체를 반환 할 수 있습니까?

그렇다면 어떻게 하시겠습니까?

내 현재 코드는 데이터 판독기 개체를 반환하지만 해당 개체를 읽으려고하면 다음과 같은 오류가 발생합니다. System.InvalidOperationException: 'Invalid attempt to call Read when reader is closed.'

내 코드 :

 OleDbDataReader queryData = sendQueryReturnData("SELECT * FROM users WHERE username = ?;", Parameters);
 while (queryData.Read()) //error on this line
 {
     //stuff
 }
조 마요

queryData범위 내에서 유지하는 한 가지 방법 은 다음과 같이 IDisposable유형 의 필드를 만들고 다른 메서드가 닫지 않도록하는 것입니다.

using System;
using System.Data.OleDb;

namespace TwitterSeachTest
{
    public class MyDataClass : IDisposable
    {
        OleDbDataReader queryData;
        OleDbCommand command;
        OleDbConnection conn;

        public object[] Parameters { get; set; } = new object[0];

        public void DoReadData()
        {
            sendQueryReturnData("SELECT * FROM users WHERE username = ?;", Parameters);
            while (queryData.Read()) //error on this line
            {
                //stuff
            }
        }

        private void sendQueryReturnData(string queryString, object parameters)
        {
            this.conn = new OleDbConnection("connectionstring");
            this.command = new OleDbCommand(queryString, conn);
            conn.Open();

            this.queryData = command.ExecuteReader();

            // your code
        }

        #region IDisposable Support
        private bool disposedValue = false; // To detect redundant calls

        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    this.queryData?.Close();
                    this.command?.Dispose();
                    this.conn?.Close();
                }

                // TODO: free unmanaged resources (unmanaged objects) and override a finalizer below.
                // TODO: set large fields to null.

                disposedValue = true;
            }
        }

        // TODO: override a finalizer only if Dispose(bool disposing) above has code to free unmanaged resources.
        // ~MyDataClass()
        // {
        //   // Do not change this code. Put cleanup code in Dispose(bool disposing) above.
        //   Dispose(false);
        // }

        // This code added to correctly implement the disposable pattern.
        public void Dispose()
        {
            // Do not change this code. Put cleanup code in Dispose(bool disposing) above.
            Dispose(true);
            // TODO: uncomment the following line if the finalizer is overridden above.
            // GC.SuppressFinalize(this);
        }
        #endregion
    }
}

코드를 입력했는데 DoReadData차이점 queryData은 이제 지역 변수 대신 필드라는 것입니다.

에 대한 몇 가지 예제 코드도 추가했습니다 sendQueryReturnData. 공지 사항은이 결과를 할당하는 command.ExecuteReader받는 사람 queryData필드. using여기서 사용하지 마십시오 .

마지막으로 IDispose. 이렇게하면이 클래스를 사용하는 사람은 이제 using문이나 호출을 사용해야합니다 Dispose.

즉, 일반적으로 데이터베이스에서 데이터를 읽고 작업이 완료되는 즉시 DB 개체를 닫거나 폐기하는 것이 더 쉽습니다. 대신 데이터를 나타내는 DTO를 만들고 a를 채우고 반환 한 List<MyDataDto>다음 리소스를 닫거나 폐기합니다. 이렇게하면 해당 리소스를 해제 할 책임이있는시기와 사람의 모호성이 줄어 듭니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

개체 메서드가 개체의 인스턴스를 반환 할 수 있습니까?

분류에서Dev

Java에서 여러 개체를 반환 할 수있는 메서드 만들기

분류에서Dev

SPARQL에서 두 개체 간의 관계를 반환 할 수 있습니까?

분류에서Dev

Rascal이 운영 체제를 메서드로 반환 할 수 있습니까?

분류에서Dev

mocked 메서드에서 mock을 반환 할 수 있습니까?

분류에서Dev

제네릭 메서드에서 원시 객체를 반환 할 수 있습니까?

분류에서Dev

forEach 메서드에서 thisArg를 반환 할 수 없습니다.

분류에서Dev

다른 메서드에서 메서드를 다시 호출 할 때 반환 값을 매개 변수로 사용할 수 있습니까?

분류에서Dev

클래스 개체 속성은 속성이 C ++에서 가져야하는 값을 반환하는 메서드를 호출 할 수 있습니까?

분류에서Dev

함수에서 fs.lstat 메서드의 결과를 어떻게 반환 할 수 있습니까?

분류에서Dev

비동기 메서드에서 IAsyncEnumerable에 대한 포인터를 반환 할 수 있습니까?

분류에서Dev

Miruken에서 Controller의 initialize 메소드에서 promise를 반환 할 수 있습니까?

분류에서Dev

Struts 2에서 Object를 반환하는 액션 메서드를 매핑 할 수 있습니까?

분류에서Dev

Dynamodb 저장 메서드가 haskey를 반환 할 수 있습니까?

분류에서Dev

Java에서 단위 유형을 반환하는 kotlin 메서드를 재정의 할 수 있습니까?

분류에서Dev

파이썬 twisted의 dataRecieved 메서드에서 데이터를 반환 할 수 있습니까?

분류에서Dev

Thrift / Scrooge에서 Option 값을 반환하는 메서드를 어떻게 선언 할 수 있습니까?

분류에서Dev

특정 지점에서 Java 메서드를 강제로 반환 할 수 있습니까?

분류에서Dev

함수에서 람다를 반환 할 수 있습니까?

분류에서Dev

C # 메서드에서 일반 [Bind]를 사용할 수 있습니까?

분류에서Dev

메서드 체이닝에 적합한 구현 유형을 Groovy 특성으로 반환 할 수 있습니까?

분류에서Dev

C ++의 스레드에서 종료 코드를 반환 할 수 있습니까?

분류에서Dev

C ++ 코드에서 mysql 함수에서 연결 객체를 반환 할 수 있습니까?

분류에서Dev

사전 키를 메서드에 전달하고 값을 반환 할 수 있습니까?

분류에서Dev

ReactJS가 Bootstrap에서 div를 반환 할 수 있습니까?

분류에서Dev

약속에서 데이터를 반환 할 수 있습니까?

분류에서Dev

.find () 메소드 : 내가 부울 대신 내 finded 개체를 반환 할 수 있습니까?

분류에서Dev

IEnumerable <T>를 반환하도록 mockRepository 반환 메서드를 어떻게 설정할 수 있습니까?

분류에서Dev

비동기 메서드가 C #에서 null을 반환 할 수 있습니까?

Related 관련 기사

  1. 1

    개체 메서드가 개체의 인스턴스를 반환 할 수 있습니까?

  2. 2

    Java에서 여러 개체를 반환 할 수있는 메서드 만들기

  3. 3

    SPARQL에서 두 개체 간의 관계를 반환 할 수 있습니까?

  4. 4

    Rascal이 운영 체제를 메서드로 반환 할 수 있습니까?

  5. 5

    mocked 메서드에서 mock을 반환 할 수 있습니까?

  6. 6

    제네릭 메서드에서 원시 객체를 반환 할 수 있습니까?

  7. 7

    forEach 메서드에서 thisArg를 반환 할 수 없습니다.

  8. 8

    다른 메서드에서 메서드를 다시 호출 할 때 반환 값을 매개 변수로 사용할 수 있습니까?

  9. 9

    클래스 개체 속성은 속성이 C ++에서 가져야하는 값을 반환하는 메서드를 호출 할 수 있습니까?

  10. 10

    함수에서 fs.lstat 메서드의 결과를 어떻게 반환 할 수 있습니까?

  11. 11

    비동기 메서드에서 IAsyncEnumerable에 대한 포인터를 반환 할 수 있습니까?

  12. 12

    Miruken에서 Controller의 initialize 메소드에서 promise를 반환 할 수 있습니까?

  13. 13

    Struts 2에서 Object를 반환하는 액션 메서드를 매핑 할 수 있습니까?

  14. 14

    Dynamodb 저장 메서드가 haskey를 반환 할 수 있습니까?

  15. 15

    Java에서 단위 유형을 반환하는 kotlin 메서드를 재정의 할 수 있습니까?

  16. 16

    파이썬 twisted의 dataRecieved 메서드에서 데이터를 반환 할 수 있습니까?

  17. 17

    Thrift / Scrooge에서 Option 값을 반환하는 메서드를 어떻게 선언 할 수 있습니까?

  18. 18

    특정 지점에서 Java 메서드를 강제로 반환 할 수 있습니까?

  19. 19

    함수에서 람다를 반환 할 수 있습니까?

  20. 20

    C # 메서드에서 일반 [Bind]를 사용할 수 있습니까?

  21. 21

    메서드 체이닝에 적합한 구현 유형을 Groovy 특성으로 반환 할 수 있습니까?

  22. 22

    C ++의 스레드에서 종료 코드를 반환 할 수 있습니까?

  23. 23

    C ++ 코드에서 mysql 함수에서 연결 객체를 반환 할 수 있습니까?

  24. 24

    사전 키를 메서드에 전달하고 값을 반환 할 수 있습니까?

  25. 25

    ReactJS가 Bootstrap에서 div를 반환 할 수 있습니까?

  26. 26

    약속에서 데이터를 반환 할 수 있습니까?

  27. 27

    .find () 메소드 : 내가 부울 대신 내 finded 개체를 반환 할 수 있습니까?

  28. 28

    IEnumerable <T>를 반환하도록 mockRepository 반환 메서드를 어떻게 설정할 수 있습니까?

  29. 29

    비동기 메서드가 C #에서 null을 반환 할 수 있습니까?

뜨겁다태그

보관