Я пытаюсь использовать Postgres Plus 9.5 с .Net 4.5, Npgsql 3.1.6. Пакет NuGet. Я прочитал, что здесь об этой ошибке, но я не понимаю, почему я это понял. Все расположено. Здесь приведен код:«Операция уже выполняется» на DataAdaper.Fill
public override DataTable getActListData(int FunkNr)
{
using (var cmd = new NpgsqlCommand())
{
cmd.CommandText = npgsqlCommand3.CommandText;
cmd.Connection = this.npgsqlConnection;
cmd.Parameters.Add(new Npgsql.NpgsqlParameter("ANWENDUNG", NpgsqlTypes.NpgsqlDbType.Numeric));
cmd.Parameters.Add(new Npgsql.NpgsqlParameter("XFUNKNR", NpgsqlTypes.NpgsqlDbType.Numeric));
using (var da = new NpgsqlDataAdapter(npgsqlCommand3))
{
var tab = new DataTable();
da.SelectCommand.Parameters["ANWENDUNG"].Value = getAnwendung();
da.SelectCommand.Parameters["XFUNKNR"].Value = FunkNr;
da.Fill(tab); // Here is the error on the 5th call
return tab;
}
}
}
Эта проблема возникает из Npgsql или из Postgres?
Некоторые другие вопросы:
Я прочитал здесь, что ленивая загрузка невозможна, но я не понимаю, из-за Npgsql или Postgres?
Возможно ли в Postgres открыть несколько курсоров и прочитать по запросу в том же соединении?
Edit: Изменен код:
using (var npgsqlConnection = new NpgsqlConnection())
{
ConnectionString = string.Format(DataClientFactory.DataBaseConnectString, DB, User, PW);
npgsqlConnection.ConnectionString = ConnectionString;
npgsqlConnection.Open();
....
the code above here
....
}
Та же ошибка в одном вызове. Ошибка:
System.InvalidOperationException occurred
HResult=-2146233079
Message=An operation is already in progress.
Source=Npgsql
StackTrace:
bei Npgsql.NpgsqlConnector.StartUserAction(ConnectorState newState)
InnerException:
Ваш код кажется, ОК, но что-то вне вашего образца может получить доступ к 'this.npgsqlConnection' ... Вам нужно внимательно следить за всеми видами использования соединения. Обратите внимание, что стандартная практика - просто открывать новые подключения и закрывать их для каждой операции - объединение пулов гарантирует, что влияние производительности не будет. –
Что касается нескольких запросов на одном и том же соединении (я предполагаю, что это то, что вы подразумеваете под ленивой загрузкой) ... Npgsql не позволяет вам одновременно открывать несколько читателей * в одном и том же соединении. Эта возможность иногда называется MARS (несколько активных наборов результатов) и поддерживается SqlClient. Тем не менее, вы все равно можете использовать курсоры PostgreSQL самостоятельно и открывать несколько курсоров, каждый раз извлекая часть набора результатов. Вам решать это. –
@ShayRojansky Перемещение происходит из Oracle, и я должен использовать тот же сеанс (соединение). Существуют переменные пакета, используемые между вызовами. – Mottor