标签: npgsql

喜欢使用参数的npgsql语句

我有一个postgresql数据库,我想查询表"位置",以检索与用户输入的名称匹配的所有位置的名称.列名是"LocationName".我正在使用带有C#的ASP.net.

NpgsqlConnection con = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["ConnString"].ToString());

NpgsqlCommand cmd = new NpgsqlCommand("Select * from \"Locations\" where \"LocationName\" LIKE \"%@loc_name%\"", con);

cmd.Parameters.AddWithValue("@loc_name", Location_Name);

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

我得到这个例外:

Npgsql.NpgsqlException: ERROR: 42703: column "%((E'My place'))%" does not exist
Run Code Online (Sandbox Code Playgroud)

我已经尝试不使用%运行查询,但它不起作用.我也试过使用下面给出的+和&,但是这也不起作用:

string query = "Select \"LocationName\" from \"Locations\" where \"LocationName\" LIKE '%'+ :loc_name +'%'";
Run Code Online (Sandbox Code Playgroud)

使用上面的行,我得到这个例外:

Npgsql.NpgsqlException: ERROR: 42725: operator is not unique: unknown + unknown
Run Code Online (Sandbox Code Playgroud)

c# asp.net npgsql

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

Power BI Desktop出现Npgsql 3.0.3错误

连接到需要SSL的AWS Postgres数据库时,我收到以下错误.我最近从npgsql 2.3.2(有bug)升级到3.0.3,无法连接.任何建议,将不胜感激.

DataSource.Error:TlsClientStream.ClientAlertException:CertificateUnknown:不接受服务器证书.链状态:无法将证书链构建到受信任的根颁发机构..在TlsClientStream.TlsClientStream.ParseCertificateMessage(字节[] buf中,的Int32&POS)在TlsClientStream.TlsClientStream.TraverseHandshakeMessages()在TlsClientStream.TlsClientStream.GetInitialHandshakeMessages(布尔allowApplicationData)在TlsClientStream.TlsClientStream.PerformInitialHandshake(字符串主机名,X509CertificateCollection clientCertificates,RemoteCertificateValidationCallback remoteCertificateValidationCallback,布尔checkCertificateRevocation)详细信息:DataSourceKind = PostgreSQL

postgresql ssl npgsql powerbi

9
推荐指数
2
解决办法
6739
查看次数

c#app中的npgsql故障 - 远程主机强行关闭现有连接

尝试从C#实用程序打开Postgresql数据库时出现以下错误:

System.IO.IOException:无法从传输连接读取数据:远程主机强制关闭现有连接.---> System.Net.Sockets.SocketException:远程主机强行关闭现有连接

我试过从远程计算机和运行Postgresql服务器的计算机上运行该程序.

目前这两台计算机上都没有防火墙,我可以使用相同的密码通过postgres管理实用程序连接数据库和服务器.我检查过用户名对数据库有权限.

这是我的连接代码:

public bool updateFromServer()
{
    try
    {
        NpgsqlConnection conn = new NpgsqlConnection(connString);
        conn.Open();
        conn.Close();
        return true;
    }
    catch (Exception e)
    {
        conn.close()
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

任何帮助都将不胜感激.

c# postgresql npgsql

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

Postgresql的FSharp数据类型提供程序

我正在尝试FSharp数据提供程序,但使用npgsql对Postgresql.我在第一线被击败了.

当我尝试创建SqlDataConnection时,它会抛出错误,并显示连接字符串不正确的消息.

类型提供程序'Microsoft.FSharp.Data.TypeProviders.DesignTime.DataProviders'报告错误:不支持关键字:'port:5432; database'.

现在,我使用Servicestack.Ormlite测试连接字符串和数据.这基本上使用IdbConnection.所以,连接都是正确的.但我不知道为什么Type Provider不工作.

这是代码.

    //type dbSchema = SqlDataConnection<ConnectionString = "Server=localhost;Port=5432; Database=TestDB;User Id=postgres;Password=g00gle*92;" >
[<CLIMutable>]
type Person = 
    { ID : int;
      FirstName : string;
      LastName : string }

[<EntryPoint>]
let main args = 
    let dbFactory = 
        OrmLiteConnectionFactory
            (
             "Server=localhost;Port=5432; Database=TestDB;User Id=postgres;Password=*****;", 
             PostgreSqlDialect.Provider)
    use dbConnection = dbFactory.OpenDbConnection()
    Console.WriteLine dbConnection.State
    let persons = dbConnection.Select<Person>()
    persons.ForEach(fun p -> Console.WriteLine p.FirstName)
    Console.Read() |> ignore
    0
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,第一个注释行无效,而下面的代码设置相同.这意味着问题只与类型提供者没有连接IMHO.

我是否需要进行任何其他设置.

如果需要任何其他细节,请告诉我.

UPDATE

在kvb的评论之后,我试过了两个.这是使用web配置更新的代码.

//type dbSchema = SqlEntityConnection<ConnectionStringName = "TestDB", Provider="Npgsql">
    type dbSchema = SqlEntityConnection< …
Run Code Online (Sandbox Code Playgroud)

postgresql f# npgsql type-providers f#-3.0

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

无法加载类型'System.Net.Security.SslStream'

我有这个简单的C#程序:

using Npgsql;
public class App {
  public static void Main(string[] args) {
    const string CONNECTION_STRING = "Host=myserver;Username=mylogin;Password=mypass;Database=mydatabase";
    using (var conn = new NpgsqlConnection(CONNECTION_STRING)) {
      conn.Open();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我用mono(mcs)编译它:

mcs -target:exe -lib:bin -r:System.Data.dll -r:Npgsql.dll -r:System.dll -r:Mono.Security.dll -out:bin/ssl.exe src/App.cs
Run Code Online (Sandbox Code Playgroud)

当我执行时,抛出一个错误:

Unhandled Exception:
System.TypeLoadException: Could not load type 'System.Net.Security.SslStream' from assembly 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
  at Npgsql.NpgsqlConnector.Open () <0x4155f7f0 + 0x00115> in <filename unknown>:0 
  at Npgsql.NpgsqlConnectorPool.GetPooledConnector (Npgsql.NpgsqlConnection Connection) <0x4155c8d0 + 0x00a4f> in <filename unknown>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeLoadException: Could not …
Run Code Online (Sandbox Code Playgroud)

c# linux mono npgsql

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

Postgres Npgsql连接池

我想在Postgres使用Npgsql时更好地理解连接池.(http://www.npgsql.org/)

当我使用连接字符串时:

UserID = root; Password = myPassword; Host = localhost; Port = 5432; Database = myDataBase; Pooling = true; Min Pool Size = 0; Max Pool Size = 100;

"Pooling"将在哪里举行?在我的应用程序服务器上或数据库上?

当我调用connection.Open()时,会发生什么?如果存在连接,则从池中获取连接,如果不存在,则创建池?

关于连接池的任何其他一般信息将不胜感激.

谢谢.

postgresql npgsql

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

使用 Daper.Net 和 NPGSQL 将数据插入 PostgreSQL jsonb 列

我正在尝试使用 Dapper.Net 将 JSON 数据插入到 JSONB PostgreSQL 列中。

用于JSONB文件Npgsql的给人使用的具体指示NpgsqlDbType.Jsonb的数据类型。

使用 Dapper,我试图将其添加为自定义参数,但没有成功。

using (var conn = myconnection)
{
    var sql = "INSERT INTO mytable (jsonbody) VALUES (@jb);";
    dp =  new DynamicParameters();
    dp.Add("jb", stringOfJsonData, (DbType)NpgsqlDbType.Jsonb);
    await conn.ExecuteAsync(sql,dp);                    
}                
Run Code Online (Sandbox Code Playgroud)

我收到的错误是 System.NotSupportedException : The parameter type DbType.36 isn't supported by PostgreSQL or Npgsql

关于如何将这两个库一起用于 JSONB 的任何建议?

谢谢。

c# postgresql npgsql dapper

8
推荐指数
2
解决办法
4668
查看次数

如何查询 Npgsql.EntityFrameworkCore 中具有 JSON 数组的列

笔记:

  • 使用 Npsql.EntityFrameworkCore.PostgreSQL v3.1.4
  • 使用 Npgsql v4.1.3.1
  • 使用代码优先方法

我有下表(称为汽车): 在此输入图像描述

它有两列:

  • LicenseNumber(输入文本)(在 Car.cs 模型中输入字符串)
  • KitchenIntegrations(jsonb 类型)(Car.cs 中的列表类型)其中 Integrations 是集成类型的列表。

Car 类如下所示:

public class Car
{
   public string LicenseNumber {get;set;}

   public List<Kitchen> KitchenIntegrations {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

Kitchen.cs 看起来像这样:

public class Kitchen
{
   public int Id {get;set;}

   public string KitchenName {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

最后我的 CarContext.cs 如下所示:

public class CarContext : DbContext
{
   public DbSet<Car> Cars { get; set; }

   public CarContext()
   {
   }

   public CarContext(DbContextOptions<CarContext> options) : base(options)
   {
   }

   protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) …
Run Code Online (Sandbox Code Playgroud)

c# postgresql npgsql entity-framework-core jsonb

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

Postgres 和 .Net - 连接池 - 最佳实践

我有一个 .Net Core (C#) 应用程序,它通过 websocket 接受用户请求,然后创建与 PostgreSQL 数据库的连接以操作/处理数据。

当用户向后端发出新请求时,调用的端点函数会创建一个新的 SQL 连接并运行查询:

// Endpoint available via Websocket
public async Task someRequest(someClass someArg)
{
    /* Create a new SQL connection for this user's request */
    using var conn = new NpgsqlConnection(connstr.getConnStr());
    conn.Open();

    /* Call functions and pass this SQL connection for any queries to process this user request */
    somefunction(conn, someArg);
    anotherFunction(conn, someArg);

    /* Request processing is done */
    /* conn is closed automatically by the "using" statement above */
} …
Run Code Online (Sandbox Code Playgroud)

.net postgresql npgsql

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

如何使用Postgres/NpgSQL动态查询列名

我有一个过滤器对象来查询具有许多列的表,而不是写一个覆盖所有列的条件(允许可选的过滤),如下所示:

WHERE ((:value0 IS NULL) OR (column_name0 = :value0)) AND ((:value1 IS NULL) OR (column_name1 = :value1)) AND... etc
Run Code Online (Sandbox Code Playgroud)

对于每一列.相反,我理想情况下我希望能够将字段名称作为参数传递:

WHERE :column_name0 = :value0 AND column_name1 = :value1 AND... etc
Run Code Online (Sandbox Code Playgroud)

这是不可能的,因为在解析时需要列(类似于此处给出的答案).

你怎么克服这个? - 我真的不想在添加或删除新列时维护SQL(正如我在第一个例子中所做的那样),我认为将列名直接构造到命令字符串中会很危险因为这可能允许sql注入.

请注意,此代码位于Web服务之后.

sql postgresql data-access-layer npgsql

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