문제

MySQL .NET 커넥터를 사용하여 일부 데이터를 읽으려고 할 때 꽤 이상한 일이 일어나고 있습니다. 코드는 다음과 같습니다.

IDataReader reader = null;

using (MySqlConnection connection = new MySqlConnection(this.ConnectionString))
{
    String getSearch = "select * from organization";
    MySqlCommand cmd = new MySqlCommand(getSearch, connection);
    cmd.CommandType = CommandType.Text;

    connection.Open();
    reader = cmd.ExecuteReader();

    while (reader.Read())
    {
        // response write some stuff to the screen (snipped for brevity)
    }
}

Executereader 후에 중단 점을 놓고 Visual Studio에서 결과보기를 확장하면 (리더 위로 이동하고 확장) 쿼리로 인해 행이 반환되는 것을 볼 수 있습니다. 그런 다음 결과보기를 다시 닫고 확장하면 '열거는 결과를 얻지 못했다'는 메시지가 표시됩니다.

독자의 내용이 보자 마자 재설정되는 것처럼 보입니다.

우리가 시도한 것에 관해서는 :
-SQL은 DB로 직접 정상적으로 실행됩니다
- 쿼리 결과를 데이터 그라이드에 직접 바인딩하면 빈 데이터 그 리드를 반환합니다.
- .NET 커넥터의 최신 버전이 있습니다
- 로컬 오류를 배제하기 위해 두 개의 다른 기계에서 시도했습니다.

지금까지 아무것도 효과가 없었습니다.

누군가 아이디어 나 제안을 제공 할 수 있다면 대단히 감사 할 것입니다.

도움이 되었습니까?

해결책

내가 이해 한 바에 따르면 SQLDATAREADER는 반환 한 데이터의 일회성 열거에 사용됩니다. 결과를 한 번 순환하면 객체가 의무를 수행했습니다. 다음은이 문제를 해결하기위한 몇 가지 아이디어입니다. 하나 또는 다른 아이디어는 귀하의 요구에 따라 귀하를 위해이 문제를 해결할 수 있습니다.

  1. 필요할 때 다른 SQLDATAREADER를 생성하려면 쿼리를 다시 실행하십시오

  2. sqldatareader를 사용하는 대신 원래 쿼리 결과를 System.data.datatable에 저장하여 원하는대로 데이터를 다시 읽고 조작 할 수 있습니다.

도움이 되었기를 바랍니다!

아담

다른 팁

DataReader가 정보를 읽으므로 사용하는 블록은 변수에 값을 할당 한 후 독자와의 연결을 닫습니다. 여기에 기사가 있습니다 그것은 당신이 필요한 곳으로 갈 수있는 코드의 몇 가지 예를 보여줍니다.

핵심은 독자의 읽기를 시도 할 때 연결을 열어야한다는 것입니다.

설명은 다음과 같습니다.

디버거에서 독자를 이미 반복했기 때문입니다 (처음보기를 확장했을 때). 이것이 독자가 일하는 방식이며, 내가 아는 바에 따르면, 독자가 처음부터 다시 읽을 수 있도록 독자가 재설정 할 수있는 방법은 없습니다.

당신은 다시 실행해야합니다 cmd.ExecuteReader(); 라인 (소스를 마우스 오른쪽 버튼으로 클릭하고 "다음 문의 설정"메뉴 옵션을 사용하여).

이것은 데이터 리더의 동작입니다. 이미 반복 된 경우 돌아갈 수 없습니다. 명령을 다시 실행하고 새 명령을 검색해야합니다.

독자를 닫은 후 데이터를 사용해야하는 경우 Typed DataSet, 또는 Untyped DataSet Adam 's에 지정된대로 대답.

그건 그렇고, 여기에 있습니다 optimizations 당신은 만들 수 있습니다 :

  • 독자를 안에 움직입니다Connection 블록을 사용하여 사용을 완료 한 후에도 범위를 벗어나게합니다 (사용중인 블록이 나면 연결이 닫히고 어쨌든 사용할 수 없으므로 외부에 남겨 두는 것은 의미가 없습니다).
  • 운영 ExecuteReader 또 다른 using 블록 (구현대로 IDisposable) 그리고 SQL과 똑같은 일을하십시오 Command (똑같다 IDisposable 상호 작용)
  • 데이터베이스에서 모든 필드를 검색하지 마십시오
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top