【问题标题】:.NET/Mono Database Access—Easy column access?.NET/Mono 数据库访问——简单的列访问?
【发布时间】:2008-11-23 02:03:11
【问题描述】:

我不确定我是否遗漏了一些非常明显的东西或什么,但我似乎无法弄清楚如何有效地访问关系数据库中的表。我将 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"];
  }
}

在我看来(希望我只是在某处遗漏了一些明显的东西)需要数据库访问的顶级方法,当您要处理大量关系时,这确实很麻烦......那么,有没有办法做一些更接近后一种伪代码的事情?

【问题讨论】:

    标签: c# .net database postgresql


    【解决方案1】:

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

    如果您想要最大性能,这应该可以。 只要记住缓存总是最快的:)

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

    【讨论】:

    • 事实证明,第二个的工作方式与我想象的有点不同。至少对于 NpgsqlDataReader,对象已经被输入,并且可以像字典一样访问。因此,对于上面的示例,rdr["id"] 已经是 System.Guid。非常酷,我认为,正是医生所要求的。 :)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2010-10-22
      • 2010-12-13
      • 1970-01-01
      • 2012-03-10
      • 2020-06-16
      • 2019-10-15
      • 1970-01-01
      • 1970-01-01
      • 2010-09-05
      相关资源
      最近更新 更多