标签: npgsql

PostgreSQL,使用 Npgsql 获取数据库存在

我无法在程序启动时可靠地检查 NET/Npgsql 中数据库是否存在。

这是代码:

Public Function dbExists(ByVal _dbName As String) As Boolean

    Dim retval As Boolean = False
    Using mCon As New NpgsqlConnection(String.Format( _
                 "Server={0};Port={1};User Id={2};Password={3};", _
                  dbserver, dbport, "postgres", dbpass))
        Try
            mCon.Open()
            Using nCom = New NpgsqlCommand("SELECT 1 FROM pg_database WHERE datname='" + _dbName + "'", mCon)
                retval = CBool(nCom.ExecuteScalar())
            End Using
        Catch ex As Exception
            retval = False
        End Try
    End Using

    Return retval
End Function
Run Code Online (Sandbox Code Playgroud)

无论数据库存在与否,该函数都返回True。我还尝试对 ExecuteScalar 进行 null 检查,获取 Count(*) 以及所有我能做的,但没有更好的结果。

该怎么做才能让它发挥作用?

postgresql npgsql

1
推荐指数
1
解决办法
4648
查看次数

如何将 SQL 参数与 NpgsqlDataAdapter 一起使用?

是否可以将参数与 NpgsqlDataAdapter 一起使用,就像我可以使用 NpgsqlCommand 一样:

          string sql = "SELECT * FROM tbl_student WHERE name = @val";
          NpgsqlCommand command = new NpgsqlCommand(sql, conn); 
          command.Parameters.AddWithValue("@val", name);
Run Code Online (Sandbox Code Playgroud)

我有这段代码,它显示有关学生的信息 ia gridview:

            string sql = "SELECT * FROM tbl_student WHERE studentname = '" + name + "'";               
            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            NpgsqlDataAdapter da = new NpgsqlDataAdapter(sql, conn);    
            ds.Reset(); 
            da.Fill(ds);   // filling DataSet with result from NpgsqlDataAdapter
            dt = ds.Tables[0]; // select select first column
            GridView1.DataSource = dt;   //connect grid …
Run Code Online (Sandbox Code Playgroud)

sql parameters npgsql

1
推荐指数
1
解决办法
7827
查看次数

NpgsqlCommand 中的参数未正确替换

我正在尝试替换字符串中的参数以在 Npgsql 查询中执行。

问题是,当它用字符串中的值替换参数时,它会添加不必要的括号,因此查询会返回错误。

NAME_SCHEMA_DBNAME_ADMIN_DB是字符串常量, ExecuteCommand只需接受NpgsqlCommand并执行它。

这是我的代码:

String qdropSchema = @"DROP SCHEMA IF EXISTS @name_schem CASCADE";
String qCreateSchema = @"CREATE SCHEMA @name_schem AUTHORIZATION @name_admin";


DbCommand commandeDrop = new NpgsqlCommand(qdropSchema);
commandDrop.Parameters.Add(new NpgsqlParameter("@name_schem", NAME_SCHEMA_DB));

DbCommand commandCreate = new NpgsqlCommand(qCreateSchema);
commandCreate.Parameters.Add(new NpgsqlParameter("@name_schem", NAME_SCHEMA_DB));
commandCreate.Parameters.Add(new NpgsqlParameter("@name_admin", NAME_ADMIN_DB));


ExecuteCommand(commandDrop);
ExecuteCommand(commandCreate);
Run Code Online (Sandbox Code Playgroud)

这是它在到达时尝试运行的 SQL 查询ExecuteCommand(commandDrop)

DROP SCHEMA IF EXISTS (('test_schemaName')) CASCADE;

我不确定为什么它添加额外的括号和单引号。通常,我希望它运行的查询是

如果存在则删除架构 test_schemaName CASCADE;

.net c# npgsql

1
推荐指数
1
解决办法
967
查看次数

如何从 Dapper(使用 Npgsql)调用具有混合大小写名称的存储过程?

来自 NuGet,我正在使用

...\packages\Npgsql.2.2.5\lib\net45\Npgsql.dll

...\packages\Dapper.1.42\lib\net45\Dapper.dll

在 PostgreSQL 中调用存储过程时,我需要将过程名称的大小写保留为

var x = cnn.Query<icd9>("GetDxLibrary", commandType: CommandType.StoredProcedure);
Run Code Online (Sandbox Code Playgroud)

我收到运行时错误:

Npgsql.dll 中发生“Npgsql.NpgsqlException”类型的未处理异常

附加信息:错误:42883:函数 getdxlibrary() 不存在。

如果 PostgreSQL 中的函数重命名为getdxlibrary(),一切顺利。

如何在 Dapper 中调用大小写混合名称的过程?

TIA

postgresql stored-procedures npgsql dapper

1
推荐指数
1
解决办法
613
查看次数

使用实体框架核心在 postgresql 中执行返回原语的存储函数

我有一个在 Postgresql 上运行的项目。我使用实体框架来执行将返回一些值(长)的存储过程。

 public override long GetHostSequenceNumber(byte hostId, byte srvId)
 {
    var hId = new Npgsql.NpgsqlParameter("@host_id", hostId);
    var sId = new Npgsql.NpgsqlParameter("@srv_id", srvId);
    var res = this.Database.SqlQuery<long>("select * from  dbo.bs_p_get_host_seqno( @host_id,@srv_id)", hId, sId).SingleOrDefault();
    return res;
  }
Run Code Online (Sandbox Code Playgroud)

简而言之,假设此过程在某些表中搜索某些特定值。

它工作得很好。但是现在我切换到 Core 2.0,我找不到做同样事情的方法。我读过一些文章,他们说要使用 FromSql,但我不能使用它,因为我没有要添加到 DbContext 的任何实体。我也尝试使用 ADO 并执行 SQL 命令,但我总是在结果中得到 -1。

public override long GetHostSequenceNumber(byte hostId, byte srvId)
    {
        var hId = new Npgsql.NpgsqlParameter("@host_id", hostId);
        var sId = new Npgsql.NpgsqlParameter("@srv_id", srvId);
        var res = this.Database.ExecuteSqlCommand("select * from  bs_p_get_host_seqno(@host_id,@srv_id)", hId,sId);
        return res;
    }
Run Code Online (Sandbox Code Playgroud)

但是 …

postgresql stored-procedures core npgsql .net-core

1
推荐指数
1
解决办法
5707
查看次数

Postgresql - 准备好的语句与连接池 - 这是一个权衡吗?

据我了解,您可以在 Postgresql 中使用准备好的语句或连接池(使用 pgPool/pgBouncer 等工具),但同时只能从其中之一中受益(至少使用 .NET 的 Npgsql 驱动程序,加上库作者建议关闭客户端)使用 PgBouncer 时的侧连接池)。我对吗?
如果是这样 - 对于其他运行时和语言(例如 Java、Python、Go)也是如此吗?或者这是一个特定于实施的问题?

postgresql connection-pooling prepared-statement npgsql pgbouncer

1
推荐指数
1
解决办法
3710
查看次数

npgsql.EntityFrameworkCore.PostgreSQL - 使用 json 参数执行函数不起作用

数据库:Postgresql

ORM:带有 Npgsql.EntityFrameworkCore.PostgreSQL 的实体框架核心

尝试调用以下函数将产品列表作为 json 传递

dbContext.product.FromSqlRaw("SELECT pa.usp_set_product({0})", productjson).ToList();
Run Code Online (Sandbox Code Playgroud)

返回错误为:“42883:函数 pa.usp_set_product(text) 不存在”

然后尝试下面

dbContext.product.FromSqlRaw(@"SELECT pa.usp_set_product('" + productjson+ "')").ToList();
Run Code Online (Sandbox Code Playgroud)

返回错误:“输入字符串的格式不正确”

然后尝试下面效果很好

 using (var cmd = new NpgsqlCommand(@"SELECT pa.usp_set_product(@productjson)", conn))
   {
    cmd.Parameters.Add(new NpgsqlParameter("productjson", NpgsqlDbType.Json) { Value = productjson});
    cmd.ExecuteNonQuery();
   }
Run Code Online (Sandbox Code Playgroud)

任何想法,请-

  1. 为什么带有 JSON 参数的 FromSqlRaw 不起作用
  2. 使用 NpgsqlCommand 是否有任何缺点 - 它是否支持 Linux 容器(docker)

谢谢,

@保罗

c# npgsql docker entity-framework-core linux-containers

1
推荐指数
1
解决办法
5165
查看次数

目前仅支持认证明文密码和认证md5密码。收到 10

我在 postgresql13 中使用 npgsql,但是在尝试连接时出现以下错误:

目前仅支持认证明文密码和认证md5密码。收到 10

我的连接行是: NpgsqlConnection conn = new NpgsqlConnection("服务器= xxxx;端口= xxxx;用户ID = xxxx;密码= xxx;数据库=数据库;")

在 postgresql 9.6 中一切正常,但它迁移到版本 13 并产生了这个问题

c# postgresql npgsql postgresql-13

1
推荐指数
1
解决办法
1万
查看次数

NpgSql调用函数/例程

鉴于以下Postgresql例程:

CREATE OR REPLACE FUNCTION checkemailexists (emailaddress text) RETURNS boolean
    LANGUAGE plpgsql
AS $$
#print_strict_params on
DECLARE
existsCount int;
BEGIN
    SELECT count(*) INTO STRICT existsCount
        FROM usercontacts WHERE usercontacts.contactaddress = emailAddress;
    IF existsCount > 0 THEN RETURN TRUE;
    ELSE RETURN FALSE;
    END IF;
END
$$
Run Code Online (Sandbox Code Playgroud)

以下.NET(Npgsql)块:

 public bool EmailExists(string email)
        {
            using (var conn = Connection)
            {
                conn.Open();
                using(var tran = conn.BeginTransaction())
                using (var cmd = new NpgsqlCommand("checkemailexists", conn))
                {
                    cmd.CommandType = System.Data.CommandType.StoredProcedure;
                    cmd.Parameters.AddWithValue("@emailAddress",NpgsqlTypes.NpgsqlDbType.Text ,"my@email.com");
                    var ret = (bool)cmd.ExecuteScalar();
                    return …
Run Code Online (Sandbox Code Playgroud)

c# postgresql npgsql

0
推荐指数
1
解决办法
3245
查看次数

npgsql-停止使用'template1'数据库

我想将大象数据库与实体框架(无论哪个版本)一起使用。我在网上找到了有关npgsql的教程,可以帮助我连接这两项技术。

我做了一个对象,它将表示来自DB的对象:

[Table("typychorob", Schema = "public")]
public class TypChoroby
{
    public TypChoroby()
    {
    }

    [Key, Column("id"), DatabaseGenerated(DatabaseGeneratedOption.Identity), Required]
    public int ID { get; set; }

    [Column("nazwa"), MaxLength(50)]
    public string Nazwa { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我创建了代表dBContext的类。Uzytkownik与TypChoroby几乎相同。

public class PrzychodniaContext : DbContext
{
    public DbSet<Uzytkownik> Uzytkownicy { get; set; }
    public DbSet<TypChoroby> TypyChorob { get; set; }

    public PrzychodniaContext() : base()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试以以下方式使用这些东西:

using (var context = new PrzychodniaContext())
        {
            context.Database.Log = post;
            var chorobska = context.TypyChorob.ToList();
        }
Run Code Online (Sandbox Code Playgroud)

这总是会产生这样的错误: …

entity-framework npgsql entity-framework-6

0
推荐指数
1
解决办法
706
查看次数