Verktyg Visningsval
2012-05-08, 17:34   #1

freddyfresh

Medlem

freddyfreshs avatar

Plats: 127.0.0.1

Registrerad: apr 2010

[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 valuestring competition_dateint 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.
__________________
Programmering : C# | HTML | CSS | PHP | C++ | SQL | Ruby | Python

Citera för snabbt svar.
freddyfresh är uppkopplad nu
2012-05-08, 18:34   #2

jovnas

Medlem

jovnass avatar

Plats: Göteborg

Registrerad: maj 2004

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?
__________________
as far as we can tell, the massacre went well...
jovnas är inte uppkopplad
2012-05-08, 21:26   #3

freddyfresh

Medlem

freddyfreshs avatar

Plats: 127.0.0.1

Registrerad: apr 2010

Citat:
Ursprungligen inskrivet av jovnas Visa inlägg
ä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.
__________________
Programmering : C# | HTML | CSS | PHP | C++ | SQL | Ruby | Python

Citera för snabbt svar.
freddyfresh är uppkopplad nu
2012-05-08, 22:03   #4

jovnas

Medlem

jovnass avatar

Plats: Göteborg

Registrerad: maj 2004

Citat:
Ursprungligen inskrivet av freddyfresh Visa inlägg
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.
__________________
as far as we can tell, the massacre went well...
jovnas är inte uppkopplad
2012-05-09, 12:15   #5

freddyfresh

Medlem

freddyfreshs avatar

Plats: 127.0.0.1

Registrerad: apr 2010

Citat:
Ursprungligen inskrivet av jovnas Visa inlägg
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.
__________________
Programmering : C# | HTML | CSS | PHP | C++ | SQL | Ruby | Python

Citera för snabbt svar.
freddyfresh är uppkopplad nu
Senaste nyheterna

Redaktionens senaste nyhetsrubriker