.NET / Mono数据库访问 - 轻松访问列?

时间:2008-11-23 02:03:11

标签: c# .net database postgresql

我不确定我是否遗漏了一些非常明显或者是什么的东西,但我似乎无法弄清楚如何有效地访问关系数据库中的表。我使用PostgreSQL作为数据库服务器(和Npgsql进行访问)和C#使用Mono 2.0。

假设我有以下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"];
  }
}

我似乎并不希望(我希望我只是遗漏了一些显而易见的地方)需要数据库访问的顶级方法,而且当你要处理大量关系时,这真的很麻烦......那么,有没有办法更接近后一种伪代码?

2 个答案:

答案 0 :(得分:1)

如果您想轻松使用ORM框架。

如果你想要最高性能,这应该有效。 请记住缓存是最快的:)

顶级示例也更快,因为没有转换。

答案 1 :(得分:0)

嘿......结果我应该尝试而不是问。找不到任何文件说它有效,但似乎有效。