在连接Postgres时出现了System.Net.Sockets.SocketException异常

3
我有一个应用程序,需要连接到Postgres DB。我有我的连接函数,但每次尝试连接到DB时都会出现异常:
{System.Net.Sockets.SocketException (0x80004005):拒绝连接 at Npgsql.NpgsqlConnector.Connect(Npgsql.NpgsqlTimeout timeout)[0x001f5] in C:\ projects \ npgsql \ src \ Npgsql \ NpgsqlConnector.cs:733 at Npgsql.NpgsqlConnector + d__ 153.MoveNext()[0x005a0] in C:\ projects \ npgsql \ src \ Npgsql \ NpgsqlConnector.cs:648 ---在上一个位置引发异常的堆栈跟踪的结尾--- 在 Npgsql.NpgsqlConnector + d__ 149.MoveNext()[0x003e1] in C:\ projects \ npgsql \ src \ Npgsql \ NpgsqlConnector.cs:455 ---在上一个位置引发异常的堆栈跟踪的结尾--- 在 Npgsql.ConnectorPool + d__ 19.MoveNext()[0x001cf] in C:\ projects \ npgsql \ src \ Npgsql \ ConnectorPool.cs:300 ---在上一个位置引发异常的堆栈跟踪的结尾---在<1d288dd8ebaf4c6f890e1e99a5a184f0>:0中,System.Threading.Tasks.ValueTask`1 [TResult].get_Result()在 System.Runtime.CompilerServices.ValueTaskAwaiter`1[TResult].GetResult() [0x00000] 中获取结果 。 at Npgsql.NpgsqlConnection+<>c__DisplayClass32_0 +<g__OpenLong | 0> d.MoveNext()[0x0046d] in C:\ projects \ npgsql \ src \ Npgsql \ NpgsqlConnection.cs:331 ---在上一个位置引发异常的堆栈跟踪的结尾--- 在C:\ Users \ Mario \ Documents \ projetos \ App1 \ App1 \ App1 \ MainPage.xaml.cs:40中,Npgsql.NpgsqlConnection.Open()[0x00000]在App1.MainPage.conexao()中使用的代码如下:
   private void conexao()
    {
        NpgsqlConnection pgsqlConnection = null;
        var connString = string.Format("Server={0};Port={1};User Id={2};Password={3};Database={4};",
                                             serverName, port, userName, password, databaseName);
        DataTable dt = new DataTable();

        try
        {
            using (pgsqlConnection = new NpgsqlConnection(connString))
            {
                usuario usuario = new usuario();
                // abre a conexão com o PgSQL e define a instrução SQL
                pgsqlConnection.Open();
                string cmdSeleciona = "Select * from funcionarios order by id_funcionario";
                List<string> lista = new List<string>();
                NpgsqlCommand cmd = new NpgsqlCommand(cmdSeleciona, pgsqlConnection);
                var reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    usuario.nome_funcionario = reader["nome_funcionario"].ToString();
                    usuario.email = reader["email"].ToString();
                }
                //using (NpgsqlDataAdapter Adpt = new NpgsqlDataAdapter(cmdSeleciona, pgsqlConnection))
                //{
                //}
            }
        }
        catch (NpgsqlException ex)
        {
            throw ex;
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            pgsqlConnection.Close();
        }
    }

异常发生在:pgsqlConnection.Open();

“连接被拒绝” - 您的连接字符串是否正确,服务器是否正在运行,您是否排除了网络连接问题等? 也就是说,您是否进行了基本的调试? - Jason
我创建了一个Windows窗体应用程序,并成功连接,我认为这不是代码本身的问题。 - Mario
1个回答

2
这个问题已经开放了一年,所以我敢给出一个不太具体的答案,关于你可以检查的事情...
请检查以下内容:
1. Win+R services.msc 或进入任务管理器并检查 postgresql 服务是否已启动。 2. 运行 PgAdmin,在浏览器中打开。如果 PgAdmin 可以连接并且您可以浏览您的数据库,那么您可以排除很多问题。 3. 检查您的连接字符串,并确保用户具有所有角色(如果您只想进行测试,请通过 pgadmin 给予他所有权限)。
如果您正在使用 docker 化环境,则需要将容器设置为相同的网络,并将 host 设置为 host.docker.internal 而不是 localhost。
这是我的工作连接字符串的示例,我的 Linux docker 容器环境:
host=host.docker.internal;port=5432;database=mydatabase;username=userxyz;password=password123

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接