위의 오류는 데이터베이스에서 수신 한 데이터에서 dataReader.Read를 수행하려고 할 때 발생합니다. 거기에 두 개의 행이 있다는 것을 알고 있으므로 데이터가 실제로 존재하지 않기 때문에 isnt입니다.Reader가 닫힐 때 FieldCount를 호출하지 못했습니다.
문제를 일으키는 CommandBehavior.CloseConnection 일 수 있습니까? ExecuteReader 직후에이 작업을 수행해야한다고 들었습니까? 이 올바른지?
try
{
_connection.Open();
using (_connection)
{
SqlCommand command = new SqlCommand("SELECT * FROM Structure", _connection);
SqlDataReader dataReader = command.ExecuteReader(CommandBehavior.CloseConnection);
if (dataReader == null) return null;
var newData = new List<Structure>();
while (dataReader.Read())
{
var entity = new Structure
{
Id = (int)dataReader["StructureID"],
Path = (string)dataReader["Path"],
PathLevel = (string)dataReader["PathLevel"],
Description = (string)dataReader["Description"]
};
newData.Add(entity);
}
dataReader.Close();
return newData;
}
}
catch (SqlException ex)
{
AddError(new ErrorModel("An SqlException error has occured whilst trying to return descendants", ErrorHelper.ErrorTypes.Critical, ex));
return null;
}
catch (Exception ex)
{
AddError(new ErrorModel("An error has occured whilst trying to return descendants", ErrorHelper.ErrorTypes.Critical, ex));
return null;
}
finally
{
_connection.Close();
}
}
미리 도움을 청하십시오.
클레어
문제가 발생한 것은 CommandBehavior.CloseConnection이 아니었던 것이 옳았습니다. 이것은 진짜 문제를 감추었습니다. 데이터 유형을 잘못된 것으로 변환하려고했습니다. '리더가 닫힐 때 FieldCount를 잘못 호출했습니다.'라는 메시지가 나타나면 코드를 밟았을 때만 나타납니다 (아마도 오랫동안 걸렸기 때문일 수도 있습니다). – ClareBear