Eu não tenho certeza se eu estou faltando alguma coisa grotescamente óbvio ou o que, mas eu não consigo descobrir como acessar eficientemente tabelas em um banco de dados relacional. Eu estou usando PostgreSQL para o servidor de banco de dados (e Npgsql pelo seu acesso) e C # com Mono 2.0.
Digamos que eu tenha a tabela criada pelo seguinte CREATE TABLEe INSERT IGNORE declarações.
CREATE TABLE foo (
id UUID NOT NULL PRIMARY KEY,
bar VARCHAR(20) NOT NULL,
baz INT NOT NULL
)
INSERT IGNORE INTO foo VALUES ('f42d3178-b900-11dd-ac23-001966607b2e', 'foo!', 1);
A maneira que eu entendo, até agora, eu tenho que (C #):
using(NpgsqlConnection dbc = new NpgsqlConnection(connectionString)) {
using(NpgsqlCommand cmd = new NpgsqlCommand(SELECT * FROM foo LIMIT 1, dbc)) {
NpgsqlDataReader rdr = cmd.ExecuteReader();
if(!rdr.HasRows())
throw new Exception(No rows);
rdr.Read();
Guid id = rdr.GetGuid(0);
string bar = rdr.GetString(1);
int baz = rdr.GetString(2);
}
}
Mas, o que eu realmente gostaria de fazer é algo parecido com o seguinte pseudocódigo:
using(NpgsqlConnection dbc = new NpgsqlConnection(connectionString)) {
using(NpgsqlCommand cmd = new NpgsqlCommand(SELECT * FROM foo LIMIT 1, dbc)) {
NpgsqlDataReader rdr = cmd.ExecuteReader();
if(!rdr.HasRows())
throw new Exception(No rows);
rdr.Read();
Guid id = (Guid)rdr[id];
string bar = (string)rdr[bar];
int baz = (int)rdr[baz];
}
}
Não parece para mim (e espero que eu apenas estou faltando alguma coisa óbvia em algum lugar) que o método superior de acesso ao banco é necessária, e que realmente é complicado quando você está indo trabalhar com lotes de relações ... então, é existe uma maneira de fazer algo mais perto do último pseudocódigo?













