[Q] Object anser sig inte vara instansierad?

Permalänk
Medlem

[Q] Object anser sig inte vara instansierad?

Tjenare.

Lite ny till att jobba i PostgreSQL med C#, ganska stor skillnad mot MySQL måste jag erkänna och har kört på ett fel.
I min klass där jag ska kunna använda en metod namngiven UpdateSetScoreCMD som uppdaterar ett värde i en databas, så har jag en variabel: object resource.

Resource ska innehålla en siffra mellan 1-X, x kan alltså vara vad som helst över 1.

Men den påstår när jag använder den tillsammans med en annan metod inte fungera. Men i andra fall funkar den.

Instansieras genom:

class SQLqueries { private object resource;

Kod från den som kallas då det kraschar:

private int GetCompetitionIdCMD(string date) { conn = new NpgsqlConnection(connString); NpgsqlCommand cmd = new NpgsqlCommand("SELECT competition_id FROM competition WHERE startdate = :value", conn); cmd.Parameters.Add(":value", NpgsqlDbType.Varchar); cmd.Parameters[0].Value = date; try { conn.Open(); resource = cmd.ExecuteScalar(); return int.Parse(resource.ToString()); <!-- här kraschar den (object not instansiated)--> } finally { conn.Close(); } }

Error bild:

Kod som hämtas separat utan att krascha:

public bool UpdateSetNewScoreCMD(int value, string competition_date, int golf_id) { int tempId = GetCompetitionIdCMD(competition_date); <!-- Här den kraschar på grund av den ovanför--> conn = new NpgsqlConnection(connString); conn.Open(); NpgsqlCommand cmd = new NpgsqlCommand("UPDATE member_competition SET score = :value WHERE competition_id = :comp_id AND golf_id = :golf_id", conn); cmd.Parameters.Add(":value", NpgsqlDbType.Integer); cmd.Parameters.Add(":comp_id", NpgsqlDbType.Integer); cmd.Parameters.Add(":golf_id", NpgsqlDbType.Integer); cmd.Parameters[0].Value = value; cmd.Parameters[1].Value = tempId; cmd.Parameters[2].Value = golf_id; if (conn.State == ConnectionState.Open) { try { int counts = cmd.ExecuteNonQuery(); if (counts > 0) { return true; } else { return false; } } finally { conn.Close(); } } else { return false; } }

Har även testat att definiera resource som "resource = null; = 0; = " "" eller liknande innan användning men gör ingen skillnad.

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
Felkod40

Permalänk
Medlem
Citat:

NpgsqlCommand.ExecuteScalar Method
Return Value
The first column of the first row in the result set, or a null reference if the result set is empty.

är du säker på att frågan genererar ett svar med parametern du testar med?

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem
Skrivet av jovnas:

är du säker på att frågan genererar ett svar med parametern du testar med?

Absolut. Har en databas med testdata och allt ligger sedan i Form1 under en try-catch som borde säga det i en NpgsqlException eller Exception men anklagar object att vara boven.

Programmet är skräddarsytt att inte kunna ange en ny data utan att data att sätta redan existerar eller är "null" i databasen. Enligt logiken så borde det alltså gå att göra detta. Bara att det inte går.

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
Felkod40

Permalänk
Medlem
Skrivet av freddyfresh:

Absolut. Har en databas med testdata och allt ligger sedan i Form1 under en try-catch som borde säga det i en NpgsqlException eller Exception men anklagar object att vara boven

Programmet är skräddarsytt att inte kunna ange en ny data utan att data att sätta redan existerar eller är "null" i databasen. Enligt logiken så borde det alltså gå att göra detta. Bara att det inte går.

vad säger debuggern då? tilldelas resource något värde?

enligt dokumentationen kommer du inte att få något NpgsqlException om din fråga inte returnerar något svar, utan du får ut "resultatet" null istället.
dvs om det inte finns något competition_id för det datum(?) du skickar in som parameter till frågan, så får du tillbaka null.
om så är fallet (att du får tillbaka null alltså) så ballar ToString() ur för att du försöker göra om "inget" till en sträng.

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem
Skrivet av jovnas:

vad säger debuggern då? tilldelas resource något värde?

enligt dokumentationen kommer du inte att få något NpgsqlException om din fråga inte returnerar något svar, utan du får ut "resultatet" null istället.
dvs om det inte finns något competition_id för det datum(?) du skickar in som parameter till frågan, så får du tillbaka null.
om så är fallet (att du får tillbaka null alltså) så ballar ToString() ur för att du försöker göra om "inget" till en sträng.

Av någon anledning ville inte databasen hämta datum utan den hämtade Id'n istället.. vilket orsakade metoden att returnera fel värde.
Så comboboxen med alla datum var med id istället vilket gjorde att query försökte hämta på id och inte datum.
Därför blev det också en error.. förklarade errorn att alla andra funka och inte den.

Konstigt nog ska inte comboboxen inte innehålla id utan den ska innehålla datum.. Oavsett.. problemet löst.

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
Felkod40