C# 데이터베이스 작업 오류: There is already an open DataReader associated with this Connection which must be closed...

1631 단어 C#
데이터베이스 저장을 진행하는 중 오류가 발생했습니다: "MySql.Data.MySqlClient.MySqlException"유형의 이상이 MySql에 있습니다.Data.dll에서 발생했지만 사용자 코드에서 처리되지 않았습니다.
추가 정보: There is already an open DataReader associated with this Connection which must be closed first.이 명령과 연관된 DataReader가 이미 열려 있으므로 먼저 닫아야 합니다.
자료를 찾아보니 해결 방법이 있는 문장을 찾았는데 수정한 후에 과연 문제를 해결했다. 문장은 다음과 같다.
1. DataReader가 켜서 사용할 때 하나의 SqlConnection에서 하나의 DataReader만 열 수 있기 때문에 다른 DataReader를 열 때 앞의 하나를 먼저 Close를 제거해야 한다.2. 제가 문장에 DataReader를 사용하지 않았고 똑같은 오류를 제시하지 않았을 수도 있습니다. 이 DataReader가 어디에 숨겨져 있는지 제가 여러분께 지적해 드리겠습니다. 제가 연구한 것이 깊이가 없기 때문에 한 가지 방법만 호출하면 DataReader가 생성될 수 있습니다. 이것도 절대 다수의 사람들이 골치 아픈 문제라고 생각합니다.데이터베이스를 업데이트하거나 문장을 삽입할 때 사람들은 보통 SqlCommand의 ExecuteNonQuery () 방법을 사용하고 전제는 공공 데이터베이스 연결을 정의하는 것이다. (조회할 때마다 새로운 연결을 생성하면 이 문제가 존재하지 않지만 데이터베이스가 차지하는 자원이 상대적으로 높을 것이다.) ExecuteNonQuery () 를 사용하면 내부에 빈 DataReader 대상이 생성된다.그리고 현재 데이터베이스 연결이 닫힌 후에야 DataReader가 해제됩니다.따라서 업데이트 방법을 사용할 때 using 키워드를 추천합니다. 이것은 문장으로 정의된 범위 내의 대상을 모두 방출할 수 있습니다.
내 데이터베이스 작업의 주요 코드는 다음과 같습니다.
                        MySqlConnection con = null;
                         if (con == null)
			{
				con = new MySqlConnection("Server=localhost;User ID=root;Password=root;Database=vs2015test");
			}
			if (con.State == ConnectionState.Closed)
			{
				con.Open();
			}
			using (MySqlCommand cmd = new MySqlCommand(insert, con))
			{
				cmd.Parameters.Add("@Temperature", MySqlDbType.Double,5).Value = Temp;
				cmd.ExecuteNonQuery();
			}

			if (con != null || con.State == ConnectionState.Open)
			{
				con.Close();
			}

좋은 웹페이지 즐겨찾기