Avatar billede alex_sleiborg Nybegynder
12. januar 2007 - 00:18 Der er 30 kommentarer og
1 løsning

Metode der tjekker om databasen indeholder email

Jeg har en mysql database der indeholder nogle email adresser. Jeg skal have tjekket, at den samme email ikke kommer til at ligge der 2 gange. Til det har jeg lavet en metode, som der skal returnere en bool. Falsk hvis den ikke indeholder den email og, og true hvis den gør. Men jeg kan simpelthen ikke få det til at virke(Sikkert fordi jeg er ved at være godt træt). Er der ikke en der lige kan komme med et hint

Her er noget jeg har fået skrabet sammen indtil videre, der mangler bare lige det sidste

    public static bool CheckIfMailIsRegistered(string Email)
    {
        string MyConnection = "server=localhost;uid=root;pwd=1234;database=TEAMWOR_website;";

        MySql.Data.MySqlClient.MySqlConnection Connect;
        Connect = new MySql.Data.MySqlClient.MySqlConnection();
        Connect.ConnectionString = MyConnection;

        Connect.Open();                                                       
        MySql.Data.MySqlClient.MySqlCommand Command = new MySql.Data.MySqlClient.MySqlCommand("SELECT Email FROM nyhedsmail WHERE Email LIKE '" + Email + "', Connect");

        MySql.Data.MySqlClient.MySqlDataReader rdr = Command.ExecuteReader();
        while (rdr.Read())
        {
        }
        rdr.Close();
        Connect.Close();
        return false;
    }

Den skal tjekke i tabelen nyhedsmail, og feltet Email. Om Emailen allerede eksisterer
Avatar billede Syska Mester
12. januar 2007 - 00:25 #1
Kan du ikke bare lade det felt være "Unique" så kan der ikke laves/oprettes 2 med samme email ...

// ouT
Avatar billede Syska Mester
12. januar 2007 - 00:27 #2
MySqlCommand Command = new MySql.Data.MySqlClient.MySqlCommand("SELECT count(id) FROM nyhedsmail WHERE email = @email LIMIT 1", Connect");
Commmand.Parameters.Add("@email", MysqlDbType.varchar, 255).Value = "din@email.dk";

int i = (int)Command.ExecuteScalar();
if(i <= 1)
// found the email
else
// did not find the email

der er sikkert types etc. men sådan ville jeg gøre ...

// oUT
Avatar billede kalp Novice
12. januar 2007 - 00:29 #3
rettede i din sql også... går ikke ud fra du vil have like.     


  Connect.Open();                                                       
        MySql.Data.MySqlClient.MySqlCommand Command = new MySql.Data.MySqlClient.MySqlCommand("SELECT Email FROM nyhedsmail WHERE Email  '" +  = Email + "', Connect");

        MySql.Data.MySqlClient.MySqlDataReader rdr = Command.ExecuteReader();
      if(rdr.HasRows)
{
rdr.Close();
Connect.Close();
return false;
}
        rdr.Close();
        Connect.Close();
        return true;
    }
Avatar billede kalp Novice
12. januar 2007 - 00:30 #4
if(rdr.Read())
{
rdr.Close();
Connect.Close();
return false;
}
        rdr.Close();
        Connect.Close();
        return true;
    }

hvis du ikke har hasrows
Avatar billede arne_v Ekspert
12. januar 2007 - 02:39 #5
12/01-2007 00:25:02 var et godt råd

i en flerbruger sammenhæng duer SELECT først ikke, da der kan oprettes en ny række
mellem SELECT og INSERT
Avatar billede alex_sleiborg Nybegynder
12. januar 2007 - 11:05 #6
Har brugt buzzz's råd. Men har lidt problemer med SQL'en

Min tabel består af 3 rækker. Name, Email, Timesubmited

"SELECT Email FROM nyhedsmail WHERE email = @email LIMIT 1"

Email er sat til at være unik
Avatar billede kalp Novice
12. januar 2007 - 11:39 #7
IF EXISTS (dinsql)

hvis den returnere 0 så findes den ikke.. og hvis den gør returnere den 1
Avatar billede kalp Novice
12. januar 2007 - 11:44 #8
Avatar billede Syska Mester
12. januar 2007 - 15:03 #9
Hvad er problemet alex?

og svar hvis det skulle bruges

// ouT
Avatar billede Syska Mester
12. januar 2007 - 15:03 #10
ups, skulle have været svar
Avatar billede alex_sleiborg Nybegynder
25. januar 2007 - 11:08 #11
Sorry for det lidt sene svar, men har haft travlt med nogen eksamener og sådan...

Problemet er den sql, er lidt kode

            MySql.Data.MySqlClient.MySqlCommand Command = new MySql.Data.MySqlClient.MySqlCommand("SELECT Email FROM nyhedsmail WHERE email = @email LIMIT 1", Connect);
            Command.Parameters.Add("@email", MySql.Data.MySqlClient.MySqlDbType.VarChar, 50).Value = Email;

            int i = (int)Command.ExecuteScalar();
            if (i <= 1)
                return Email + "eksisterer allerede i vores database";
            else
                return string.Empty;
Avatar billede kalp Novice
25. januar 2007 - 11:37 #12
Findes LIMIT overhovedet i MSSQL ???
Sikker på det ikke er EXISTS !??
Avatar billede alex_sleiborg Nybegynder
25. januar 2007 - 11:46 #13
Det er ikke mssql, men mysql
Avatar billede kalp Novice
25. januar 2007 - 11:47 #14
ahh okay se så giver det jo mening:P

beklager;)
Avatar billede Syska Mester
25. januar 2007 - 16:03 #15
say what .... "Problemet er den sql, er lidt kode" ... hvad mener du ?

Hvis det er MySQL skal du vist bruge "?" istedet for "@" .... men er ikke sikker ...

Men hvad er der af flere problemer ?

// ouT
Avatar billede alex_sleiborg Nybegynder
25. januar 2007 - 18:42 #16
Min kode fejler ikke noget. Det er min sql sætning, lige en tastefejl :)

Jeg får denne her exception

MySql.Data.MySqlClient.MySqlException: #23000Duplicate entry 'alex_sleiborg@hotmail.com' for key 1 at MySql.Data.MySqlClient.PacketReader.CheckForError() at MySql.Data.MySqlClient.PacketReader.ReadHeader() at MySql.Data.MySqlClient.PacketReader.OpenPacket() at MySql.Data.MySqlClient.NativeDriver.ReadResult(Int64& affectedRows, Int64& lastInsertId) at MySql.Data.MySqlClient.CommandResult.ReadNextResult(Boolean isFirst) at MySql.Data.MySqlClient.CommandResult..ctor(Driver d, Boolean isBinary) at MySql.Data.MySqlClient.NativeDriver.SendQuery(Byte[] bytes, Int32 length, Boolean consume) at MySql.Data.MySqlClient.MySqlCommand.GetNextResultSet(MySqlDataReader reader) at MySql.Data.MySqlClient.MySqlCommand.Consume() at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery() at DataGateway.JoinNewsMail(String Name, String Email) in c:\Documents and Settings\Administrator\Dokumenter\Visual Studio 2005\WebSites\GA-HotSpot\index.aspx.cs:line 101
Avatar billede arne_v Ekspert
25. januar 2007 - 18:57 #17
det lyder som om du forsoger at indsaette en primary key eller en unique key som
allerede er der
Avatar billede alex_sleiborg Nybegynder
25. januar 2007 - 19:07 #18
Det jeg prøver er at lave en metode der tjekker om emailen allerede er i db'en

    public static string CheckMail(string Email)
    {
        string MyConnection = "server=212.97.132.242;uid=TEAMWOR_admin;pwd=kommet;database=TEAMWOR_website;";
        MySql.Data.MySqlClient.MySqlConnection Connect;

        Connect = new MySql.Data.MySqlClient.MySqlConnection();
        Connect.ConnectionString = MyConnection;

        try
        {
            Connect.Open();

            MySql.Data.MySqlClient.MySqlCommand Command = new MySql.Data.MySqlClient.MySqlCommand("SELECT Email FROM nyhedsmail WHERE email = @email LIMIT 1", Connect);
            Command.Parameters.Add("@email", MySql.Data.MySqlClient.MySqlDbType.VarChar, 50).Value = Email;

            int i = (int)Command.ExecuteScalar();
            if (i <= 1)
                return Email + "eksisterer allerede i vores database";
            else
                return string.Empty;
        }
        catch (Exception ex)
        {
            return ex.ToString();
        }

    }
Avatar billede arne_v Ekspert
26. januar 2007 - 01:24 #19
så virker det jo, du skal bare catche den exception og bruge det som indikation af
at email adressen allerede er der
Avatar billede Syska Mester
26. januar 2007 - 04:18 #20
MySql.Data.MySqlClient.MySqlCommand Command = new MySql.Data.MySqlClient.MySqlCommand("SELECT count(Email) FROM nyhedsmail WHERE email = @email LIMIT 1", Connect);

Du skal lave en count på den email ... da du ikke kan caste en string til en int ...

Så skulle der gerne få det rigtige tilbage ... med at mailen allerede findes ...

// oUT
Avatar billede alex_sleiborg Nybegynder
30. januar 2007 - 15:59 #21
Command.ExecuteScalar() returnere den en string da?? Kan du ikke komme med eksempel
Avatar billede Syska Mester
30. januar 2007 - 22:45 #22
Nej, den retunere et Object ... men fra databasen returene du en String, du selecter jo Email hvilket som jeg har forstået det, er i databasen en string .. ik' ?

Derfor skal du lave en count(Email) eller count(*) fra den table .... Så der bliver retuneret en Int og ikke en string

// ouT
Avatar billede alex_sleiborg Nybegynder
01. februar 2007 - 14:59 #23
Hmm jeg sidder og prøver på en anden lokal database nu. Jeg kan kun få den til at returnere 0 lige nu... Men jeg kan heller ikke få sat feltet til unik, det burde man da kunne med MySql front???
Avatar billede Syska Mester
01. februar 2007 - 16:22 #24
jo, det burde jeg da mene
Avatar billede alex_sleiborg Nybegynder
02. februar 2007 - 11:35 #25
Jeg kan simpelthen ikke finde det i MySQL front... Hvad plejer du at bruge til at håndtere mysql databaser med grafisk buzzzz?
Avatar billede Syska Mester
02. februar 2007 - 16:50 #26
phpmyadmin hvis det er på en linux/bsd ...

ellers kan "mysql query" eller "mysql browser"

Begge kan hentes på www.mysql.com
Avatar billede alex_sleiborg Nybegynder
05. februar 2007 - 23:07 #27
Nu har jeg hentet gui tools fra mysql.com. Det er nu ellers nemt at gøre en felt/column unique med phpmyadmin, men min mysql server kører på en xp... Jeg bruger administrations værktøjet, jeg finder den table jeg vil redigere. Der er noget der hedder Column options, hvor man kan sætte feltet til Primary Key, Not Null, Auto Increment. Men har prøvet noget andet... Er dette den rigtige måde at få feltet unikt på "ALTER TABLE `database`.`table` ADD UNIQUE INDEX Index(`ColumnDerSkalVæreUnik`);"
Avatar billede Syska Mester
05. februar 2007 - 23:40 #28
pas, bruger ikke det værktøj så meget men sql'en ser da nogen lunde rigtig ud ... men er langt fra sikker ...

// ouT
Avatar billede arne_v Ekspert
06. februar 2007 - 00:54 #29
den SQL ser helt rigtig ud
Avatar billede arne_v Ekspert
06. februar 2007 - 00:56 #30
du kan også bruge CREATE INDEX

men forskellen er ens som man siger
Avatar billede alex_sleiborg Nybegynder
06. februar 2007 - 09:36 #31
Jeg får denne exception, nu har jeg fået sat feltet til unique...


Specified cast is not valid

Her er lige et lille uddrag af lidt kode

            try
            {
                Connect.Open();

                MySql.Data.MySqlClient.MySqlCommand Command = new MySql.Data.MySqlClient.MySqlCommand("SELECT count(workemail) FROM employees WHERE workemail = @email LIMIT 1", Connect);
                Command.Parameters.Add("@email", MySql.Data.MySqlClient.MySqlDbType.VarChar, 50).Value = Email;

                if ((int)Command.ExecuteScalar() <= 1)
                {
                    return Email + "eksisterer allerede i vores database";
                    Connect.Close();
                }
                else
                {
                    Connect.Close();
                    return string.Empty;
                }
            }
            catch (Exception ex)
            {
                Connect.Close();
                return ex.Message;
            }
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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