NpgsqlDataReader Select语句 - 不适用于camelCase数据表

时间:2014-12-01 17:11:25

标签: c# sql-server postgresql sqldatareader npgsql

您好我正在连接到postgres数据库并将数据传输到我的本地计算机。

这是我的代码:

        public DataTable GetDataTable(string sql)
    {
        var conn = GetOpenConnection();
        var dt = new DataTable();

        var cmd = conn.CreateCommand();
        cmd.CommandText = sql;

        NpgsqlDataReader dr = null;

        try
        {
            dr = cmd.ExecuteReader();
            dt.Load(dr);
        }
        catch (Exception ex)
        {
            Log.Info(ex);
            throw;
        }
        finally
        {
            dr.Close();
            conn.Close();
        }

        return dt;
    }

以下方案正常

sql =“SELECT * FROM test_db”

sql =“SELECT * FROM testdb”

但是; sql =“SELECT * FROM testDb”然后我得到了异常

  

错误42P01“testdb”不存在

我注意到几张桌子。如果我每次抛出异常时都使用camelcase数据表的名称。 这是我得到异常的代码

  

dr = cmd.ExecuteReader();

所以我想知道我不能调用camelCase表吗? 这是什么最好的解决方案?

感谢您的反馈和解答! 谢谢

1 个答案:

答案 0 :(得分:0)

如果您对实施ORM感兴趣,我很幸运使用MicroLite ORM和Npgsql .Net数据提供程序连接到Postgres数据库。不完全是你想要的,但它是一个可以解决你的问题的选择。 https://github.com/TrevorPilley/MicroLite/wiki

您可以在下面看到我使用[Table(" Mail")]指定表名称非常容易使用CamelCase或任何您想要的。

using System;

using MicroLite.Mapping;
using MicroLite;

namespace MailOut.Model
{
    [Table("Mail")]
    public class Email
    {
        [Identifier(IdentifierStrategy.DbGenerated)]
        [Column("priKey")]
        public Int64 PriKey { get; set; }

        [Column("toemail")]
        public string ToEmail { get; set; }

        [Column("fromemail")]
        public string FromEmail { get; set; }

        [Column("body")]
        public string Body { get; set; }
    }
}