Это пример, приведенный в руководстве. Когда я пытаюсь сделать то же самое, я получаю бесчисленные исключения. Какая ошибка в этом.Npgsql странное исключение
using(NpgsqlConnection conn = new NpgsqlConnection("connstring"))
{
conn.Open();
using(NpgsqlCommand command = new NpgsqlCommand("select command", conn))
{
command.Parameters.Add(new NpgsqlParameter("column1", NpgsqlDbType.Integer);
command.Parameters[0].Value = 4;
using(NpgsqlDataReader dr = command.ExecuteReader())
{
dr.Read();
Console.Write("{0} \t", dr[0]);
}
}
}
Исключение:
System exception System.IO.IOException: I/O error occurred.
at Npgsql.NpgsqlState.<ProcessBackendResponses_Ver_3>d__a.MoveNext()
at Npgsql.NpgsqlState.IterateThroughAllResponses(IEnumerable`1 ienum)
at Npgsql.NpgsqlState.Query(NpgsqlConnector context, NpgsqlCommand command)
at Npgsql.NpgsqlConnector.Query(NpgsqlCommand queryCommand)
at Npgsql.NpgsqlConnector.ReleaseRegisteredListen()
at Npgsql.NpgsqlConnector.ReleaseResources()
at Npgsql.NpgsqlConnectorPool.UngetPooledConnector(NpgsqlConnection Connection, NpgsqlConnector Connector)
at Npgsql.NpgsqlConnectorPool.ReleasePooledConnectorInternal(NpgsqlConnection Connection, NpgsqlConnector Connector)
at Npgsql.NpgsqlConnectorPool.ReleasePooledConnector(NpgsqlConnection Connection, NpgsqlConnector Connector)
at Npgsql.NpgsqlConnectorPool.ReleaseConnector(NpgsqlConnection Connection, NpgsqlConnector Connector)
at Npgsql.NpgsqlConnection.Close()
at Npgsql.NpgsqlConnection.Dispose(Boolean disposing)
at System.ComponentModel.Component.Dispose()
Теперь это работает правильно. В чем разница:
using(NpgsqlConnection conn = new NpgsqlConnection("connstring"))
{
conn.Open();
using(NpgsqlCommand command = new NpgsqlCommand("select command", conn))
{
command.Parameters.Add(new NpgsqlParameter("column1", NpgsqlDbType.Integer);
command.Parameters[0].Value = 4;
NpgsqlDataReader dr = command.ExecuteReader();
dr.Read();
Console.Write("{0} \t", dr[0]);
}
}
Почему datareader не может использоваться с Idisposable?
Есть ли у вас какие-либо результаты перед исключением, и есть ли ошибки в журналах postgres? 'NpgsqlState.IterateThroughAllResponses' находится в разборе ответов на запросы без результата и есть внутренние запросы, отправленные при очистке соединения. Я думаю, что здесь, хотя либо у Npgsql есть ошибка, либо в вашем коде есть ошибка (возможно, ваша строка соединения или запрос, который вы не указываете в вашем примере кода, где ошибка лежит), а затем Npgsql плохо справляется с сообщение из его внутренних компонентов, а не хорошее объяснение проблемы. –
Кроме того, вы могли бы показать свою настоящую '' connstring ''и' "команду" 'только с именем пользователя, именем сервера и паролем, измененным на XXXX. Очевидно, вы не хотите публиковать это, но проблема может быть там. –
Это похоже на проблему в Npgsql, где она неправильно обрабатывает ситуацию с ошибкой. Странная часть - это то, почему вы получаете IOExceptions при удалении соединения. Отключаете ли вы от сервера во время запуска вашей программы? –