标签: npgsql

使用npgsql调用以字符作为参数的函数

我试图使用Npgsql来调用一个以CHARACTER作为参数的函数(存储过程),但它不起作用.如果我声明没有参数的相同函数,或者使用INTEGER参数,我会得到我想要的结果集.当我将参数声明为CHARACTER时,它将停止工作.怎么了?

这是我的函数的代码:

CREATE OR REPLACE FUNCTION testrefcursor1(in xxx character varying(10)) RETURNS SETOF refcursor AS
$$
DECLARE 
  ref1 refcursor;
  ref2 refcursor;
BEGIN

OPEN ref1 FOR 
 SELECT * FROM accounts;
RETURN NEXT ref1;

OPEN ref2 FOR 
 SELECT * FROM accounts;
RETURN NEXT ref2;

RETURN;
END;
$$
LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的C#代码:

var connection = new Npgsql.NpgsqlConnection(connectionString.ConnectionString);

connection.Open();
var trans = connection.BeginTransaction();

var command = new Npgsql.NpgsqlCommand("testrefcursor1", connection);
command.CommandType = System.Data.CommandType.StoredProcedure;

var parameter = command.CreateParameter();
parameter.ParameterName = "xxx";
parameter.DbType = System.Data.DbType.String;
parameter.Value = "10";
command.Parameters.Add(parameter); …
Run Code Online (Sandbox Code Playgroud)

c# database postgresql mono npgsql

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

如何生成下一个主键值

我使用的是 Visual Studio 2010 PostgreSQL 9.x Npgsql

我正在尝试从 C# WinForms 应用程序上的字段插入数据。我只是不知道如何即时生成/检索下一个主键值。这是我的列名:

EpiphanyKey [PK] bigserial 交易数字许可证字符 dateOfActv 日期时间时间

我需要插入命令是“会话安全的”,因为多个人可以同时将数据输入到数据库中。

 NpgsqlConnection conn = new NpgsqlConnection("Server=localhost;Port=5432;User Id=postgres;Password=password;Database=epiphany;"); // postgres 8.3 on my test system
 conn.Open(); // opens the connection

 NpgsqlCommand cmd = new NpgsqlCommand("INSERT INTO wsmsmrs210 (epiphanyKey,transaction,license,dateOfActv,time, conn);

   NpgsqlDataReader dr = cmd.ExecuteReader();
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,NpgsqlCommand cmd = ... 语句无法正常工作,因为我不知道主键值 epiphanyKey 的下一个主键值。

在将查询发送到数据库时生成下一个主键值的任何想法或代码片段?

c# postgresql npgsql winforms

4
推荐指数
2
解决办法
3722
查看次数

如何在VS2010 Pro的实体数据模型向导中将数据源更改为PostgreSQL

我按照此处的指南进行操作:https://github.com/npgsql/Npgsql/wiki/Visual-Studio-Design-Time-Support---DDEX-Provider#install-npgsqlddexprovidervsix

当我执行“更改数据源”步骤时,列表中仅显示 SQL Server 提供程序。(PostgreSQL 数据库)不显示。

我可以执行哪些故障排除步骤来找出它不显示的原因?

Win7 x32、VS2010专业版

postgresql ado.net-entity-data-model npgsql

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

Npgsql 或您的 PostgreSQL 不支持 System.UInt32 类型

使用 Npgsql V3.0.3.0,我将一条新记录添加到一个表中,该表在数据库中有一个 OID 类型的列,它应该映射到UInt32.Net 类型。

执行插入命令时,抛出以下异常“Npgsql 或您的 PostgreSQL 不支持此 .NET 类型:System.UInt32”。

异常中的堆栈跟踪是:

at Npgsql.TypeHandlerRegistry.get_Item(Type type)
at Npgsql.TypeHandlerRegistry.get_Item(Object value)
at Npgsql.NpgsqlParameter.ResolveHandler(TypeHandlerRegistry registry)
at Npgsql.NpgsqlParameter.Bind(TypeHandlerRegistry registry)
at Npgsql.NpgsqlCommand.ValidateAndCreateMessages(CommandBehavior behavior)
at Npgsql.NpgsqlCommand.ExecuteNonQueryInternal()
at Npgsql.NpgsqlCommand.ExecuteNonQuery
Run Code Online (Sandbox Code Playgroud)

此表中GetSchemaTablea的方法DataReader报告 OID 列的“数据类型”为UInt32

postgresql npgsql

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

错误:“无法设置 ssl 模式”

我正在尝试在我的连接字符串中设置SSL Mode

SSL Mode=preferred;
Run Code Online (Sandbox Code Playgroud)

ArgumentException但是当我的代码尝试连接到数据库时,我得到了:

显示 ArgumentException 的异常信息,其中包含消息“无法设置 ssl 模式。参数名称:ssl 模式”。 InnerException 消息是“未找到请求的值‘首选’。”。

请注意InnerException, 说:

未找到请求的值“首选”。

required查看以下文档,指定,disabled或应该有效preferred

我使用的是 Npgsql 3.0.3,它是通过 NuGet 获得的:

NuGet 显示已安装 Npgsql 3.0.3

npgsql

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

在VS Code上运行asp.net核心时,Configuration.GetConnectionString返回null,但在Visual Studio上可以正常运行

这是我的appsettings.json文件

{
  "ConnectionStrings": {
    "DefaultConnection": "Host=localhost;Port=5432;Database=db;User ID=postgres;Password=root"
  },
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我检索连接字符串的方式:

// Only works when run through visual studio not on vs code
Configuration.GetConnectionString("DefaultConnection")
Run Code Online (Sandbox Code Playgroud)

我的launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": ".NET Core Launch (web)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            "program": "${workspaceRoot}\\src\\Chlx\\bin\\Debug\\netcoreapp1.0\\Chlx.dll",
            "args": [],
            "cwd": "${workspaceRoot}",
            "stopAtEntry": false,
            "internalConsoleOptions": "openOnSessionStart",
            "launchBrowser": {
                "enabled": true,
                "args": "${auto-detect-url}",
                "windows": {
                    "command": "cmd.exe",
                    "args": "/C …
Run Code Online (Sandbox Code Playgroud)

connection-string npgsql visual-studio-2015 visual-studio-code asp.net-core

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

Npgsql/Postgresql:“函数不存在”错误消息

这让我摸不着头脑。有一个类似的问题可能与“函数不存在”有关,但我真的认为它确实存在并且PostgreSQL 函数不存在但答案似乎不是很明显。PostgreSQL 9.5。

我有一个基于 Npgsql 的成员资格查询,如下所示:

using (var conn = new NpgsqlConnection(ConnectionString))
{
    conn.Open();
    using (var comm = new NpgsqlCommand("get_user_by_username", conn))
    {
        comm.CommandType = CommandType.StoredProcedure;
        comm.Parameters.Add("_user_name", NpgsqlDbType.Varchar, 250).Value = username;
        comm.Parameters.Add("_application_name", NpgsqlDbType.Varchar, 250).Value = _ApplicationName;
        comm.Parameters.Add("_online", NpgsqlDbType.Boolean).Value = userIsOnline;
        using (var reader = comm.ExecuteReader())
        {
            return GetUsersFromReader(reader).OfType<MembershipUser>().FirstOrDefault();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这个函数存在于我的 postgresql 数据库中:

CREATE OR REPLACE FUNCTION public.get_user_by_username(
    _user_name character varying,
    _application_name character varying,
    _online boolean)
  RETURNS SETOF user_record AS
$BODY$begin

if _online then
    return …
Run Code Online (Sandbox Code Playgroud)

c# sql postgresql npgsql

4
推荐指数
2
解决办法
5686
查看次数

事务无法通过 Task.WhenAll 处理并行命令

我的 Postgres 数据库中有一些主表(如公司)和许多从属表(如 CompanyAddresses、CompanyPaymentInfos 等):

CREATE TABLE Companies (
Id uuid NOT NULL PRIMARY KEY,
...);

CREATE TABLE CompanyAddresses(
CompanyId uuid NOT NULL PRIMARY KEY REFERENCES Companies(Id),
...);

CREATE TABLE CompanyPaymentInfos(
CompanyId uuid NOT NULL PRIMARY KEY REFERENCES Companies(Id),
...);
Run Code Online (Sandbox Code Playgroud)

我在 C# 代码中使用标准库中的事务:

private TransactionScope GeTransactionScope()
{
    return new TransactionScope(
        TransactionScopeOption.RequiresNew,
        new TransactionOptions
        {
            IsolationLevel = IsolationLevel.ReadCommitted
        },
        TransactionScopeAsyncFlowOption.Enabled);
}

private async Task DoChange(...)
{
    using (var scope = GeTransactionScope())
    {
        await Insert(Company);

        await Task.WhenAll(
            Insert(CompanyPaymentInfo),
            Insert(CompanyAddress),
            Insert(CompanyTags),
            // so …
Run Code Online (Sandbox Code Playgroud)

c# postgresql transactionscope npgsql dapper

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

Npgsql.PostgresException:列无法自动转换为类型 bytea

使用 EF-Core for PostgresSQL,我有一个具有 type 字段的实体byte,但决定将其更改为 type byte[]。但是当我进行迁移时,在应用生成的迁移文件时,它引发了以下异常:

Npgsql.PostgresException (0x80004005): 42804: 列“Logo”无法自动转换为类型 bytea

我在互联网上搜索了解决方案,但我看到的只是其他数据类型的类似问题,而不是字节数组。请帮忙。

entity-framework npgsql ef-core-2.1

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

通过 npgsql 使用 ca 证书连接到 .NET Core 上的 DO Postgres 集群

我实际上在使用DigitalOcean 的 Postgres 集群。设法使用我拥有的凭据通过 DataGrip 连接到服务器,但我在 .NET Core 上遇到了身份验证问题。显然,您需要使用给定的凭据 + 提供的 ca 证书(DigitalOcean 提供 CA)进行身份验证。

services.AddDbContext<NozomiDbContext>(options =>
                {
                    options.UseNpgsql(mainDb
                        , builder =>
                        {
                            builder.EnableRetryOnFailure();
                            builder.ProvideClientCertificatesCallback(certificates =>
                            {
                                var cert = new X509Certificate2("ca-certificate.crt");
                                certificates.Add(cert);
                            });
                        }
                    );
                    options.EnableSensitiveDataLogging(false);
                    options.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);
                }, ServiceLifetime.Transient);
Run Code Online (Sandbox Code Playgroud)

之后,运行项目的结果是:

System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?如果这还不够,真的很抱歉。

顺便说一下,我在 PG 11.4 上。

postgresql npgsql digital-ocean .net-core

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