【发布时间】:2021-07-12 20:22:40
【问题描述】:
我正在尝试在 .NET 5 控制台应用程序中使用 Npgsql 连接到我的 Postgres 数据库。 Postgres 数据库在 Docker 容器中运行。我已经使用 Azure Data Studio 连接到数据库一段时间了,没有任何问题,所以我有点不确定我在从这个应用程序连接时做错了什么。
调用NpgsqlConnection.Open()时,会抛出System.Timeout异常。
System.Private.CoreLib.dll 中出现“Npgsql.NpgsqlException”类型的未处理异常:“连接时出现异常” 发现内部异常,请参阅变量窗口中的 $exception 了解更多详细信息。 最里面的异常 System.TimeoutException : 连接尝试超时 在 Npgsql.NpgsqlConnector.Connect(NpgsqlTimeout 超时)
我已确认运行我的 Postgres 数据库的 Docker 容器正在运行,并且我可以从 Azure Data Studio 和 PGAdmin 成功连接和查询它。
这是我的控制台应用程序中的代码。我已经编辑了连接字符串中的值,并多次检查了这些值,以确保它们与我在 Azure Data Studio 和 PGAdmin 中用于连接的值相同。我也尝试在连接字符串中包含特定的数据库名称,但结果是相同的System.Timeout 异常。
我正在使用 Npgsql 版本 5.0.4。
using Dapper;
using Npgsql;
namespace EplStats
{
class Program
{
static void Main(string[] args)
{
var connStr = "Host={host};Port=5433;Username={usr};Password={pwd};";
using (var conn = new NpgsqlConnection(connStr))
{
conn.Open();
var test = conn.Query("select * from epl.teams;");
}
}
}
}
这是我用于 Postgres 和 PGAdmin 的 docker-compose.yml
version: "3.9"
services:
postgres-db:
image: postgres:13
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
ports:
- "5433:5432"
networks:
- pg_network
volumes:
- db_data:/var/lib/postgresql/data
pgadmin4:
image: dpage/pgadmin4
environment:
PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL}
PGADMIN_DEFAULT_PASSWORD: ${POSTGRES_PASSWORD}
ports:
- "8088:80"
networks:
- pg_network
networks:
pg_network:
driver: bridge
volumes:
db_data:
我觉得我在这里遗漏了一些明显的东西,因为从控制台应用程序打开连接的代码相对简单。
【问题讨论】:
标签: postgresql docker .net-core database-connection npgsql