Avatar billede glenn007 Nybegynder
12. juni 2009 - 01:39 Der er 12 kommentarer

indsæt i mySQL

HVordan dælen kan jeg lave min i query så den indsætter hvis der ikke er en forekomst af det jeg vil indsætte.

Com.CommandText = "select count(*) as antal FROM id WHERE flop = randoms" ;
                if (antal == 0)
                { Com.CommandText = "INSERT INTO id (flop) VALUES (?Navn)"; }
                else { }


som i kan se har ejg prøvet at anvende ANTAL som en variabel. men den går ikke ( jeg skriver mit program i c# )
Avatar billede glenn007 Nybegynder
12. juni 2009 - 01:41 #1
lidt mere kode


Con.Open();//Åbner forbindelse til databasen
                Com.Connection = Con;

                                Com.CommandText = "select count(*) as antal FROM id WHERE flop = (?Random)&& INSERT INTO id (flop) VALUES (?Navn) if antal =0";
           

             

             
                Com.Prepare();

                Com.Parameters.Add("?Random", randoms);
                Com.Parameters.Add("?Navn", randoms);

                Com.ExecuteNonQuery();           

           
                Con.Close();
Avatar billede arne_v Ekspert
12. juni 2009 - 03:31 #2
Hvor tit regner du med at duplikat vil forekomme ?

Hvis sjældent så bare sæt et unikt index på det felt der ikke må være duplikate værdier i (primær nøgle har allerede et unikt index) og catch den exception du får ved duplikat.
Avatar billede arne_v Ekspert
12. juni 2009 - 03:37 #3
Hvis tit så noget a la:

using(MySqlConnection con = new MySqlConnection(constr))
{
    MySqlCommand sel = new MySqlCommand("SELECT COUNT(*) FROM id WHERE flop = ?flop", con);
    sel.Parameters.Add("?flop", MySqlDbType.VarChhar, 50);
    sel.Parameters["?flop"].Value = flopval;
    int antal = (int)sel.ExecuteScalar();
    if(antal > 0)
    {
        MySqlCommand ins = new MySqlCommand("INSERT INTO id (flop) VALUES(?flop)", con);
        sel.Parameters.Add("?flop", MySqlDbType.VarChhar, 50);
        sel.Parameters["?flop"].Value = flopval;
        sel.ExecuteNonQuery();
    }
}
Avatar billede arne_v Ekspert
12. juni 2009 - 03:37 #4
if(antal == 0)
Avatar billede glenn007 Nybegynder
12. juni 2009 - 03:41 #5
ikke tit så det er vel en accceptabel løsning :)  men hvordan kan jeg tælle mine poster og smide det antal i en variabel som c# forstår og jeg kan bruge i mit program ?

det lader ikke til man kan  select count(*) as ANTAL

og bruge antal som ariabel senere i noget som ikke har med sql sætninger at gøre.
Avatar billede glenn007 Nybegynder
12. juni 2009 - 03:48 #6
nej den går ikke...  prøvede således

Com.CommandText = "select count id(*) as antal";
                Com.Prepare();
                Com.ExecuteNonQuery();

                Con.Close();
                if (antal == 0) /////den her er forbudt....
                { }
                else { }




og den vil barer ikke lade mig bruge den til noget.. jeg forstår det ikke helt det plejer jeg da at kunne syns jeg
Avatar billede arne_v Ekspert
12. juni 2009 - 03:49 #7
Jeg tror #3 besvarer begge spørgsmål.
Avatar billede glenn007 Nybegynder
12. juni 2009 - 03:50 #8
hmmm gad vide om det er fordi det er specifikt for c#  jeg har rodet en del med det i asp for mange år siden


int antal = (int)sel.ExecuteScalar();


den her kender jeg ikke. mentak for inputten der. lidt mere til rygraden og de grå celler... og hår...  :)
Avatar billede arne_v Ekspert
12. juni 2009 - 03:58 #9
En command har 3 forskellige slags execute metoder:

.ExecuteReader som returnerer en reader
.ExecuteScalar som returnerer en enkelt værdi (en enkelt række og en enkelt kolonne)
.ExecuteNonQuery som ikke returnerer noget (bruges til INSERT, UPDATE etc.)
Avatar billede glenn007 Nybegynder
12. juni 2009 - 03:59 #10
ja det gør det.  men hvilket namespace hører den metode under.  den genkender ikke nogle af udtrykene / komandoerne
Avatar billede arne_v Ekspert
12. juni 2009 - 04:09 #11
MySqlConnetion og MySqlCommand ligger alle i MySql.Data.MySqlClient namespace.

Execute metoderne er alle metoder i MySqlCommand.
Avatar billede arne_v Ekspert
04. august 2009 - 03:52 #12
Tid at faa afsluttet her?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester