[postgresql] Fout: "could not receive data from client"

Pagina: 1
Acties:

  • mahi
  • Registratie: Juni 2001
  • Laatst online: 03-10-2025

mahi

God bless GoT

Topicstarter
Ik ben wat aan het experimenteren met C# (Visual Studio .NET) en postgresql, maar stoot op een vreemd probleem.
C#:
1
2
3
4
5
6
7
NpgsqlConnection sqlConnection = new NpgsqlConnection("Server=localhost;Port=5432;User Id=test;Password=test;Database=test");
string sSql = "SELECT id FROM test";
NpgsqlCommand myCommand = new NpgsqlCommand(sSql);

sqlConnection.Open();
myCommand.ExecuteNonQuery();
sqlConnection.Close();
Dit stukje elementaire code waar mijns inziens niets mis mee is geeft me steevast de melding
An unhandled exception of type 'System.InvalidOperationException' occurred in npgsql.dll

Additional information: The Connection is not open.
Deze melding krijg ik op de regel "myCommand.ExecuteNonQuery();". Als ik deze in comment zet is de melding weg, maar ik denk niet dat daar een probleem is: ExecuteNonQuery() krijgt gewoonweg geen verbinding met de database, dus het lijkt erop dat de Open() niet werkt (alhoewel die geen foutmelding teruggeeft).

In de postgresql log krijg ik volgende melding:
LOG: could not receive data from client: No connection could be made because the target machine actively refused it.
Hier ligt hoogst waarschijnlijk het probleem, maar ik begrijp de oorzaak niet goed.

De postgresql server draait op dezelfde pc als waar ik de C#-code op ontwikkel en test. Dit is een Windows XP machine met de Windows firewall uitgeschakeld en geen andere firewall producten aanwezig die mogelijk poorten blokkeren. De postgresql server draait op de standaard poort 5432 en werkt wel degelijk. Via pgAdmin kan ik zonder problemen op de server en databases, gebruikersn tables,... aanmaken, aanpassen en verwijderen. Aangezien pgAdmin ook via poort 5432 verbindt (als ik netstat mag geloven) en geen foutmeldingen in de postgresql log nalaat sta ik voor een raadsel wat er mis loopt.

Het is niet dat de C# totaal geen verbinding met de server krijgt, want als ik bijvoorbeeld een verkeerde databasenaam opgeef dan krijg ik netjes "FATAL: database "blah" does not exist" in de postgresql log te zien. Teken dat er wel degelijk communicatie tussen beiden is.

Maar wat gaat er dan mis?

A bus station is where a bus stops. A train station is where a train stops... On my desk I have a workstation.


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 11:55

mulder

ik spuug op het trottoir

connection aan command object meegeven?

oogjes open, snaveltjes dicht


  • stp_4
  • Registratie: Maart 2003
  • Laatst online: 30-04 19:47
myCommand.SelectCommand.ExecuteNonQuery();

edit: Ik zou ook even voor de zekerheid controleren of je db connectie niet al open staat. Mocht je foutmelding krijgen op je ExecuteNonQuery dan blijft daarna je connectie open staan en krijg je daarna de melding dat de db al open staat. (try catch finally)

werkt het zo?
code:
1
2
3
4
5
..
string sSql = "SELECT id FROM test"; 
NpgsqlCommand myCommand = new NpgsqlCommand(sSql, sqlConnection); 
myCommand.Connection.Open();
...

[ Voor 128% gewijzigd door stp_4 op 22-04-2005 14:37 ]

stp - PSN ID: stp_4


  • mahi
  • Registratie: Juni 2001
  • Laatst online: 03-10-2025

mahi

God bless GoT

Topicstarter
Het probleem zat inderdaad in de
code:
1
NpgsqlCommand myCommand = new NpgsqlCommand(sSql);
regel. Ik moest daar ook nog een connectie meegeven.
code:
1
NpgsqlCommand myCommand = new NpgsqlCommand(sSql, sqlConnection);
werkt dus wel.

Bedankt!

A bus station is where a bus stops. A train station is where a train stops... On my desk I have a workstation.