2015-02-19 5 views
0

Моя программа соединяется с ssh (ssh.net) с хостом, с поставщиком данных npgsql в базу данных psql и удаляет запись с заданным ID.program get stuck after psql delete statement

Удаляет запись как следует, но программа застревает после этого не менее 1 минуты. С с использованием оператора соединение должно уже отключиться после SQL-команды, о которой я думаю, но у меня также нет ошибки, почему так долго.

Есть ли что-то, что я забыл и должен ждать перерыва?

 
SshClient client = new SshClient(host, username, password);

try { //SSH Connection client.Connect(); if (client.IsConnected) { scrLog.Content += "SSH connection successfull"; scrLog.Content += Environment.NewLine; } else { scrLog.Content += "SSH connection failed"; scrLog.Content += Environment.NewLine; }

//Portforwarding to Port 5432 (postgresql) var portFwdL = new ForwardedPortLocal(psqlBoundHost, psqlUPort, psqlHost, psqlUPort); client.AddForwardedPort(portFwdL); portFwdL.Start(); if (portFwdL.IsStarted) { scrLog.Content += "Portforwarding started"; scrLog.Content += Environment.NewLine; } else { scrLog.Content += "Portforwarding failed"; scrLog.Content += Environment.NewLine; } //Connection to Database with a Delete Command try { string connstring = String.Format("Server={0};Port={1};" + "User Id={2};Password={3};Database={4}", psqlBoundHost, psqlPort, sqluser, sqlpass, database); using (NpgsqlConnection conn = new NpgsqlConnection(connstring)) { conn.Open(); string sql1 = "delete from tblTest where testId = '" + nr + "';"; //string sql2 = "\q"; NpgsqlCommand cmd1 = new NpgsqlCommand(sql1, conn); cmd1.ExecuteNonQuery(); scrLog.Content += sql1; scrLog.Content += Environment.NewLine; //NpgsqlCommand cmd2 = new NpgsqlCommand(sql2, conn); //cmd2.ExecuteNonQuery(); //scrLog.Content += sql2; //scrLog.Content += Environment.NewLine; } } catch (Exception ex) { MessageBox.Show("Error with the psql-connection:" + Environment.NewLine + ex.Message); } client.Disconnect(); scrLog.Content += "SSH connection closed"; scrLog.Content += Environment.NewLine; } catch (Exception ex) { MessageBox.Show("Error with the ssh-connection:" + Environment.NewLine + ex.Message); }

I судимое, чтобы использовать

\ Q

команду в конце концов, но это дает мне всегда ошибка «42601: ошибка синтаксиса в или рядом с "\" ", и я прочитал, что он не нужен.

Может кто-нибудь помочь?

+2

Вы путаете Psql - инструмент командной строки для доступа к базе данных кластера PostgreSQL - и Npgsql - библиотека программного обеспечения для доступа к PostgreSQL с C#. В Npgsql вы не можете использовать команды psql, такие как '\ q', вы просто выдаете действительные команды SQL. Кроме того, если ваш параметр 'nr' - это некоторое число (как это может быть), его не следует указывать. Однако ни один из них не объясняет длительный период ожидания. Пожалуйста, проверьте файл журнала PostgreSQL для подсказок. – Patrick

+0

Спасибо за совет @Patrick. В файлах журналов всегда использую программу, она говорит после времени ожидания «неожиданный EOF при подключении клиента» – juri

ответ

0

После изучения и тестирования различных сценариев я наконец нашел тайм-аут. Мне нужно было отключить пул соединений, когда соединение все еще открыто после закрытия, если это необходимо снова. Я просто отключил его с помощью Pooling=false.

string sqlpool = "false"; 
string sqlconn = String.Format("Server={0};Port={1};User Id={2};Password={3};Database={4};Pooling={5};", 
        sqlserver, sqlport, sqluserid, sqlpass, sqldatabase, sqlpool);