Моя программа соединяется с 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: ошибка синтаксиса в или рядом с "\" ", и я прочитал, что он не нужен.
Может кто-нибудь помочь?
Вы путаете Psql - инструмент командной строки для доступа к базе данных кластера PostgreSQL - и Npgsql - библиотека программного обеспечения для доступа к PostgreSQL с C#. В Npgsql вы не можете использовать команды psql, такие как '\ q', вы просто выдаете действительные команды SQL. Кроме того, если ваш параметр 'nr' - это некоторое число (как это может быть), его не следует указывать. Однако ни один из них не объясняет длительный период ожидания. Пожалуйста, проверьте файл журнала PostgreSQL для подсказок. – Patrick
Спасибо за совет @Patrick. В файлах журналов всегда использую программу, она говорит после времени ожидания «неожиданный EOF при подключении клиента» – juri