varquerySql=string.Format("select {0} from {1} where {2} = @0",db.DatabaseType.EscapeSqlIdentifier(ValueColumn),db.DatabaseType.EscapeTableName(TableName),db.DatabaseType.EscapeSqlIdentifier(KeyColumn));
varupdateSql=string.Format("update {0} set {1} = @0 where {2} = @1 and {1} = @2",db.DatabaseType.EscapeTableName(TableName),db.DatabaseType.EscapeSqlIdentifier(ValueColumn),db.DatabaseType.EscapeSqlIdentifier(KeyColumn));
varinsertSql=string.Format("insert into {0} ({1}, {2}) select @0, @1 /*poco_dual*/ where not exists (select {1} from {0} where {1} = @0)",db.DatabaseType.EscapeTableName(TableName),db.DatabaseType.EscapeSqlIdentifier(KeyColumn),db.DatabaseType.EscapeSqlIdentifier(ValueColumn));
do
{
// The loop ensures atomicity of the select + update even for no transaction or read committed isolation level
Database=newDatabase(TestDatabase.Connection,newSqlServer2008DatabaseType(){UseOutputClause=false},IsolationLevel.ReadUncommitted);// Need read uncommitted for the transaction tests