나는 처음 PetaPoco를 사용하여,이 오류 받고 있어요 ... 주어진 다음과 같은 문제에 대한 답변에 따르면PetaPoco "이미 열려있는 DataReader가"콘솔 응용 프로그램에서
An unhandled exception of type 'System.InvalidOperationException' occurred in Anonymiser.exe. Additional information: There is already an open DataReader associated with this Command which must be closed first.
을
select, loop results, update on each row
). 아래의 관련 코드를 게시했습니다. 첫 번째 비트는 기본적으로 "쿼리"를 호출하여 테이블 밖으로 모든 데이터를 가져옵니다 (임의로하려는 데이터의 데이터베이스 구조를 알지 못하도록 디자인되었습니다).), 그때
//select all data in a table
// non-generic version :: db.query<db_table>("select * from db_tableName");
var typedMethod = queryMethodInfo.MakeGenericMethod(t);
var allRows = typedMethod.Invoke(db, new Object[] { "select * from " + tableName, null });
//then loop through the data
foreach (var item in (allRows as IEnumerable))
{
string primaryKey;
if (findPrimaryKey(item, out primaryKey)) // no primary key no update
{
// randomize the data here
DataRandomizer.ProcessObject(item);
// push data back to the database
db.Update(tableName, primaryKey, item);
}
}
내가 '가까운'모든 작업 후 연결을해야 ...과 같이, 삽입 된 각 행과 "업데이트"를 임의의 데이터 후 각 행의 데이터를 변경? 각 SQL 작업에 대해 새로운 PetaPoco.Database
개체를 생성해야합니까? 그것은 answer에 의해 제안 된 해결책이 될 솔기가 없다. 이것은 1 개의 요청은 1 개의 연결을 의미하고, 연결은 공유되어 있으며 이것은 이미 아무 것도 공유하지 않는 단일 스레드 콘솔 앱임을 시사한다.
업데이트 : 그냥이 ... 광기를 시도했지만 작동, 누군가가 나에게 온건 한 해결책을주세요
(new PetaPoco.Database("DBConnectString")).Update(tableName, primaryKey, item);
각 작업마다 연결을 닫거나 한 번 연결을 열고 모든 작업에 사용할 수 있습니다. – Reddy
@ Reddy @Reddy 방금 작업 한 코드로 제 질문을 업데이트했습니다. 그러나이 작업을 수행하는 데 필요한 일종의 솔루션이라고 생각하지 않습니다. – Nnoel
@Reddy, 실제로 "한 번 연결 열기"는 정확하게 내가 한 일입니다. – Nnoel