12. januar 2007 - 00:18Der 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");
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
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
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(); }
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 ...
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
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???
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`);"
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; }
Synes godt om
Ny brugerNybegynder
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.