#c# #wpf #npgsql
#c# #wpf #npgsql
Вопрос:
В моем приложении, когда я нажимаю кнопку
<Button x:Name="SQLconnectionButtonTest" Content="Test SQL connection" VerticalAlignment="Top" HorizontalAlignment="Left" Click="SQLconnectionButtonTest_Click"></Button>
и код:
public void SQLconnectionButtonTest_Click(object sender, RoutedEventArgs e)
{
var cs = "Host=localhost;Username=postgres;Password=postgres123;Database=testdb";
using var con = new NpgsqlConnection(cs);
con.Open();
var sql = "SELECT version()";
using var cmd = new NpgsqlCommand(sql, con);
var version = cmd.ExecuteScalar().ToString();
MessageBox.Show($"Postgres version: {version}");
}
У меня ошибка:
System.Net.Sockets.Исключение SocketException:
На английском языке было бы «не удается установить соединение, поскольку конечный компьютер активно отказывается от него.
Сервер Postgresql запущен, я создал базу данных testdb в pgadmin
Комментарии:
1. И вы можете подключить к нему какой-либо другой инструмент запроса, используя ту же строку подключения?
2. у меня есть только это
3. Хорошо, так как насчет установки и попытки что-то еще? Также прочитал thegeekstuff.com/2014/02/enable-remote-postgresql-connection и проверьте, что ваш pg разрешает подключения к локальному хостингу.
4. я прочитал это, я удалил postgresql 13 и установил 9.6. К обоим я могу подключиться из командной строки, используя psql -h localhost -p 5435 -U postgres. Или со второго компьютера psql -h 192.168.0.120 -p 5435 -U postgres. Но я все равно не могу подключиться из приложения
5. В этих командных строках указан порт как 5435, но по умолчанию используется порт 5432. В опубликованной вами строке подключения не указано
Port=5435
Ответ №1:
Из комментариев кажется, что, возможно, ваш PG работал на нестандартном порту, и требуемая спецификация номера порта отсутствовала в строке подключения. Вы отметили, что существует разница в поведении между PG 13 и PG9.6; с этой целью я бы посоветовал использовать что-то вроде TCPView, чтобы проверить, какой порт и интерфейс прослушивает PG, и убедиться, что данные строки подключения совпадают. Также проверьте, работает ли ваш брандмауэр Windows в режиме, в котором запущенное приложение влияет на то, разрешено ли соединение или нет, а не только на порт