我不确定我是否缺少明显或明显的东西,但似乎无法弄清楚如何高效地访问关系数据库中的表。我使用PostgreSQL数据库服务器(和为Npgsql的其接入)和C#与单声道2.0。.NET/Mono数据库访问 - 轻松访问列吗?
假设我有由以下CREATE TABLE
和INSERT
语句创建的表格。
CREATE TABLE foo (
id UUID NOT NULL PRIMARY KEY,
bar VARCHAR(20) NOT NULL,
baz INT NOT NULL
)
INSERT INTO foo VALUES ('f42d3178-b900-11dd-ac23-001966607b2e', 'foo!', 1);
我的理解是迄今为止的方式,我有(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);
}
}
但是,我真的很想做的是类似下面的伪代码:
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"];
}
}
在我看来(并希望我只是错过某些地方显而易见的东西),需要数据库访问的顶级方法,而当您要处理大量关系时真的很麻烦ns ...那么,有没有办法更接近后者的伪代码?
事实证明,第二个作品有点不同比我想象的。至少NpgsqlDataReader,对象已经输入,并访问,好像他们是一本字典。因此,对于上面的示例,rdr [“id”]已经是System.Guid。我想,非常酷,只是医生的命令。 :) – 2008-11-23 03:20:26