J'essaie le Postgres Plus 9.5 avec .Net 4.5, Npgsql 3.1.6 NuGet. J'ai lu ce qu'il y a à propos de cette erreur, mais je ne comprends pas pourquoi je l'ai. Tout est disposé. Voici le code:"Une opération est déjà en cours" sur 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;
}
}
}
Ce problème provient de Npgsql ou provient-il de Postgres?
Quelques autres questions:
J'ai lu ici, que le chargement paresseux est impossible, mais je ne comprenais pas est est à cause de la Npgsql ou de Postgres?
Est-il possible dans Postgres d'ouvrir plusieurs curseurs et de les lire à la demande dans la même connexion?
Edit: Changé le code:
using (var npgsqlConnection = new NpgsqlConnection())
{
ConnectionString = string.Format(DataClientFactory.DataBaseConnectString, DB, User, PW);
npgsqlConnection.ConnectionString = ConnectionString;
npgsqlConnection.Open();
....
the code above here
....
}
La même erreur dans le même appel. L'erreur:
System.InvalidOperationException occurred
HResult=-2146233079
Message=An operation is already in progress.
Source=Npgsql
StackTrace:
bei Npgsql.NpgsqlConnector.StartUserAction(ConnectorState newState)
InnerException:
Votre code semble, OK, mais quelque chose en dehors de votre échantillon peut accéder 'this.npgsqlConnection' ... Vous devez suivre attentivement toutes les utilisations de la connexion. Notez qu'il est de pratique courante d'ouvrir simplement de nouvelles connexions et de les fermer pour chaque opération - le regroupement de connexions garantira l'absence d'impact sur les performances. –
En ce qui concerne les demandes multiples sur la même connexion (je suppose que c'est ce que vous voulez dire par chargement paresseux) ... Npgsql ne vous permet pas d'avoir plusieurs * lecteurs * ouverts en même temps sur la même connexion. Cette fonctionnalité est parfois appelée MARS (plusieurs ensembles de résultats actifs) et est prise en charge par SqlClient. Cependant, vous pouvez toujours utiliser les curseurs PostgreSQL et avoir plusieurs curseurs ouverts, chaque fois que vous récupérez une partie du jeu de résultats. C'est à vous de gérer cela. –
@ShayRojansky La migration est à partir d'Oracle et je dois utiliser la même session (connexion) Il existe des variables de package utilisées entre les appels. – Mottor