UPDATE,INSERT do MySQL

0

Witam,
mam problem z insertami oraz updatami w mojej aplikacji polaczonej z zewnetrzna baza MySQL z serwisu home.pl.

Początkowo miałem wszystko podłączone do lokalnej bazy MSSQL, myslac ze przelaczenie miedzy bazami nie bedzie dużym problemem, jednak przy zmianie, podczas rejestracji, lub zwyklej zmiany hasła wyrzuca mi błąd :
"Specified cast is not valid" - jakbym mial zle skonskruowane zapytanie, jednak bezposrednio do bazy je wklepujac nie mam problemu, ponizej kod :

public void ChangePassMethod()
        {
            bool exists = false;
            string passwd = passtxt.Text;
            string passchange = "update `OpUser` set `password`=@password WHERE `login`=@username";
            DialogResult dialog = MessageBox.Show("Na pewno zmienić hasło dla użytkownika : " + logintxt.Text + " ?", "Password change", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
            if (dialog == DialogResult.OK)
            {
                try
                {
                con.Open();
                using (MySqlCommand ck = new MySqlCommand("select `login` from `OpUser` where `login`=@username", con))
                {
                    ck.Parameters.AddWithValue("@username", logintxt.Text);
                    exists = (int)ck.ExecuteScalar() > 0;
                }
                if (exists)
                {
                    string EncryptedPass = HashPass(passwd);
                    MySqlCommand mcd = new MySqlCommand(passchange, con);
                    mcd.Parameters.AddWithValue("@username", MySqlDbType.VarChar).Value = logintxt.Text;
                    mcd.Parameters.AddWithValue("@password", MySqlDbType.VarChar).Value = EncryptedPass;
                    if (mcd.ExecuteNonQuery() == 1)
                    {
                        MessageBox.Show("Hasło zmieniono pomyślnie.");
                        this.Close();
                    }
                    else
                    {
                        MessageBox.Show("Wystąpił problem przy zmianie hasła, spróbuj ponownie.");
                    }
                }
                else if (!exists)
                {
                    MessageBox.Show("Podano błędny login.", "Bląd", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    logintxt.Clear();
                    logintxt.Focus();
                }
                

                }
                catch(Exception er)
                {
                    MessageBox.Show(er.Message);
                }
                finally
                {
                    con.Close();
                }
            } 

Dodatkowo, jezeli wpisze zly login, ktorego w bazie nie ma, zamiast komunikatu : "Podano błędny login" gdy taki nie istnieje, sprawdzajac go ExecuteScalarem, wyrzuca mi błąd : "object reference not set to an instance of an object"

Sporo szukalem w sieci jednak juz rece opadaja, prosze o pomoc ...

Z góry dziekuje! :)

0

zamień małpy @ przy parametrach na pytajniki ?, np. zamiast @username daj ?username

0

niestety ten sam problem, podkreślam że lokalnie wszystko działało bez zarzutu, czyli cos chyba z parametrami albo zapytaniem jest nie tak ale nie wiem co...

0
beli napisał(a):

niestety ten sam problem, podkreślam że lokalnie wszystko działało bez zarzutu, czyli cos chyba z parametrami albo zapytaniem jest nie tak ale nie wiem co...

Jeżeli lokalnie zapytanie działa, to globalnie na tej samej bazie też musi. Nie może być tak, że jedno zapytanie na identycznej bazie działa na drugiej nie.

0

tylko, że lokalnie masz M__S__SQL a zdalnie M__y__SQL a przynajmniej tak napisałeś w pierwszym poście

0

Tak dokladnie, zdalnie mam MySQL a tam niestety jest roznica zapytan, mimo ze zmodyfikowalem je to dalej jest problem, mysle ze chodzi czesciowo o :

exists = (int)ck.ExecuteScalar() > 0; 

Zrobilem to tak :

 Int32 check = Convert.ToInt32(ck.ExecuteScalar());
                    if(check > 0)
                    {
                        exists=true;
                    }
                    else
                    {
                        exists = false;
                    }
1

Przecież to, co robisz, nie ma zupełnie sensu. Aplikację pisze się na takie środowisko, na jakie ma być wdrożona, a nie zupełnie inne. Zainstaluj lokalnie MySQL i napisz aplikację dostosowaną do tej bazy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1