2008-11-23 36 views
0

我不确定我是否缺少明显或明显的东西,但似乎无法弄清楚如何高效地访问关系数据库中的表。我使用PostgreSQL数据库服务器(和为Npgsql的其接入)和C#与单声道2.0。.NET/Mono数据库访问 - 轻松访问列吗?

假设我有由以下CREATE TABLEINSERT语句创建的表格。

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 ...那么,有没有办法更接近后者的伪代码?

回答

1

如果你想轻松去与ORM框架。

如果你想最大性能这应该工作。 只记得缓存是最快的:)

顶部的例子也更快,因为没有转换。

+0

事实证明,第二个作品有点不同比我想象的。至少NpgsqlDataReader,对象已经输入,并访问,好像他们是一本字典。因此,对于上面的示例,rdr [“id”]已经是System.Guid。我想,非常酷,只是医生的命令。 :) – 2008-11-23 03:20:26

0

嘿...原来我刚才应该试图它,而不是要求。找不到任何文件说它可以工作,但它似乎工作。