>데이터 베이스 >MySQL 튜토리얼 >\'DataReader를 먼저 닫아야 합니다\'가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

\'DataReader를 먼저 닫아야 합니다\'가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-30 11:24:13765검색

Why Does

데이터 관리 예외: "DataReader를 먼저 닫아야 합니다" 오류 이해 및 해결

제공된 코드에서 새 DataReader가 동일한 연결에 대해 열려 있는 동안 ExecuteNonQuery()를 사용하는 SQL 문입니다. 이로 인해 "먼저 닫아야 하는 이 연결과 연결된 열려 있는 DataReader가 이미 있습니다."라는 예외가 발생합니다.

MSDN에 따르면 이 예외는 DataReader가 열려 있을 때 사용하는 연결이 독점적으로 잠겨 있기 때문에 발생합니다. 사용 기간 동안. 이는 원래 DataReader가 닫힐 때까지 해당 연결에 대해 새 DataReader 생성을 포함한 다른 명령을 실행할 수 없음을 의미합니다.

이 오류를 해결하려면 다른 명령을 실행하기 전에 DataReader가 닫혀 있는지 확인해야 합니다. 동일한 연결에 대한 명령. 제공된 코드에서 예외를 발생시키는 줄 바로 앞에 myReader.Close()에 대한 호출을 추가하면 이를 수행할 수 있습니다.

myCommand.Dispose();
myReader.Close(); // Close DataReader
if (myReader.HasRows) {
    int i = 0;
    // Always call Read before accessing data.
    while (myReader.Read()) {
        if (myReader["frProductid"].ToString() == "") //there is no productid exist for this item
        {
            strInsertSQL = "Insert Into tblProduct_temp (Productid) Values('this istest') ";
            MySqlCommand cmdInserttblProductFrance = new MySqlCommand(strInsertSQL, myConnection);
            cmdInserttblProductFrance.ExecuteNonQuery(); // ExecuteNonQuery after closing DataReader
        }
    }
}

ExecuteNonQuery() 명령을 실행하기 전에 DataReader를 닫으면 연결에 대한 배타적 잠금을 해제하고 새 명령이 성공적으로 실행되도록 허용합니다.

위 내용은 \'DataReader를 먼저 닫아야 합니다\'가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.