Inny sposób wprowadzania danych do metody MySqlConnection.

Odpowiedz Nowy wątek
2019-09-25 18:51
0

Witam mam taki problem ze aplikacja działa mi po stornie zewnętrznego hosta 46.149.... ,ale niestety po wejściu w lokalna siec 192.168.... nie mam połączenie z serwerem.
I tu moje pytanie w jaki sposób podmieniać IP jeśli jestem w sieci lokalnej ,a jeśli korzystam z opcje sieci na ip zewnętrzne

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
namespace WindowsFormsApp1
{
    public partial class Logowanie : Form
    {
        MySqlConnection poloczenie = new MySqlConnection("server=;user=;password;database=");
        MySqlCommand komenda;
        MySqlDataReader odczyt;
        string zapytanie = "";

        public string passr = "";
       public string userr = "";
        bool sesion = false;
        public string ktojest="";
       public string ver = "";
        public Logowanie()
        {
            InitializeComponent();
            odczytlista();
            version();
        }

        public void odczytlista()
        {

            try
            {
                if (poloczenie.State == ConnectionState.Closed)
                {
                    poloczenie.Open();
                    zapytanie = "select * from uzytkownicy";
                    komenda = new MySqlCommand(zapytanie, poloczenie);
                    odczyt = komenda.ExecuteReader();
                    string id = "";

                    if (odczyt.HasRows)
                    {
                        while (odczyt.Read())
                        {
                            id = odczyt[0].ToString();
                            userr = odczyt["user"].ToString();
                            passr = odczyt["pass"].ToString();

                            //  string[] arr = new string[24];
                            //  ListViewItem itm;

                            //  //Add first item
                            //   arr[0] = odczyt[0].ToString();
                            //  arr[1] = odczyt["user"].ToString();
                            //  arr[2] = odczyt["pass"].ToString();

                               //sesion = true;
                            if (passr == haslo.ToString() & userr == uzytkownik.ToString())
                            {
                                ktojest = userr;

                               sesion = true; 

                            }

                        }
                        poloczenie.Close();
                    }

                }

            }

            catch (Exception ex)
            {
                string Blad = string.Format("Bład połaczenia bazy danych:\n(0)", ex.Message);
                MessageBox.Show(Blad, "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }
            finally
            {
                poloczenie.Close();
            }
        }

        public void version()
        {

            try
            {
                if (poloczenie.State == ConnectionState.Closed)
                {
                    poloczenie.Open();
                    zapytanie = "select * from versja";
                    komenda = new MySqlCommand(zapytanie, poloczenie);
                    odczyt = komenda.ExecuteReader();

                    if (odczyt.HasRows)
                    {
                        while (odczyt.Read())
                        {
                            ver = odczyt[1].ToString();

                        }
                        poloczenie.Close();
                    }

                }

            }

            catch (Exception ex)
            {
                string Blad = string.Format("Bład połaczenia bazy danych:\n(0)", ex.Message);
                MessageBox.Show(Blad, "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }
            finally
            {
                poloczenie.Close();
            }
        }
        private void Logowanie_Load(object sender, EventArgs e)
        {

        }

        public void uzytkownik_TextChanged(object sender, EventArgs e)
        {

        }

            private void haslo_TextChanged(object sender, EventArgs e)
            {

            }

            private void button1_Click(object sender, EventArgs e)
            {
            if (ver == "1.1") { 
                odczytlista();

                try
                {
                    odczytlista();

                    if (sesion==true)
                    {

                        DialogResult = DialogResult.OK;

                }
                    else
                    {
                        string Blad = string.Format("Błedny Login lub Hasło");
                    // MessageBox.Show(Blad, "Błąd", MessageBoxButtons.OK);

                    Mesage.Text = Blad;
                    }
                }
                catch (Exception ex)

                {
                    string Blad = string.Format("Bład połaczenia bazy danych:\n(0)", ex.Message);
                    MessageBox.Show(Blad, "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error);

                }
                finally
                {
                    poloczenie.Close();
                }
            }
            else {

                string Blad = string.Format("Ta wersja jest nie aktualna .Pobiez najnowsza wersje.");
                MessageBox.Show(Blad, "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void Mesage_Click(object sender, EventArgs e)
        {

        }

    }

}
edytowany 2x, ostatnio: Ktos, 2019-09-25 19:01

Pozostało 580 znaków

2019-09-25 21:12
0

Stwórz plik konfiguracyjny, który będzie wczytywany przy starcie aplikacji. W nim trzymaj dane do połączenia.

edytowany 1x, ostatnio: AdamWox, 2019-09-25 21:12

Pozostało 580 znaków

2019-09-25 22:51
0

Mógł byś jakiś prosty przykład napisać(myślałem o tym ale nie wiedziałem jak się zabrać do tego potrzebuje to także do ustawię tabeli)?

Pozostało 580 znaków

2019-09-26 16:14
1

Nie wiem, czy chcesz trzymać hasła w pliku, ale ja korzystam z JSON. Robisz sobie klasę

public class Config
{
    public string ServerAddress { get; set; }
    public string DatabaseName { get; set; }
    public string UserName { get; set; }
    public string Password { get; set; }
}

Pobierasz z nugetów Newtonsoft.JSON i korzystając z serializacji tworzysz plik konfiguracyjny, albo go odczytujesz.

public static void SerializeJson<T>(T obj, string path)
{
     JsonSerializer serializer = new JsonSerializer();
     using (StreamWriter sw = new StreamWriter(path))
     {
         using (JsonWriter writer = new JsonTextWriter(sw))
         {
              serializer.Serialize(writer, obj);
         }
     }
}

public static T DeserializeJson<T>(string path)
{
     T obj;
     JsonSerializer deserializer = new JsonSerializer();
     using (StreamReader dr = new StreamReader(path))
     {
         using (JsonReader reader = new JsonTextReader(dr))
         {
             obj = deserializer.Deserialize<T>(reader);
         }
     }
     return obj;
}

Używasz w ten sposób

//SERIALIZACJA
Config c = new Config();
c.ServerAddress = "192.168.0.101";
c.DatabaseName = "moja_baza";
c.UserName = "user";
c.Password = "password";
SerializeJson(c, "ścieżka_do_pliku_i_nazwa");

//DESERIALIZACJA
Config c = DeserializeJson<Config>("ścieżka_do_pliku_i_nazwa");

Pozostało 580 znaków

2019-09-26 16:52
0

A czemu nie użyć standardowego rozwiązania z przechowywaniem connection stringa w configu aplikacji, i odczytem przez System.Configuration.ConfigurationManager.ConnectionStrings["NazwaConnectionStringa"].ConnectionString; ?


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2019-09-26 17:37
0

A to nie jest tak, że System.Configuration.ConfigurationManager jest w stanie przechowywać tylko stringi? Ja, w niektórych aplikacjach potrzebuje nieco więcej niż tylko string, a cały obiekt. Druga sprawa, wydaje mi się, że tak jest prościej i szybciej, niekoniecznie bezpiecznie.

Pozostało 580 znaków

2019-09-26 18:04
0

Owszem, tylko stringi, ale obiekt MySqlConnection też potrzebuje stringa, więc to nawet ładnie pasuje.

Standardowym i zakładanym miejscem przechowywania konfiguracji jest plik konfiguracyjny aplikacji, nie ma żadnego problemu aby trzymać w nim jakieś dodatkowe dane. Tworzenie niestandardowych rozwiązań się słabo skaluje i powoduje niekorzystne wrażenia u osób, które takie coś spotykają.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2019-09-26 18:18
0

Tworzenie niestandardowych rozwiązań się słabo skaluje i powoduje niekorzystne wrażenia u osób, które takie coś spotykają

Sam wszystko piszę, z nikim się nie dzielę. Korzystam z tego tylko w przypadku aplikacji okienkowych (WinForms). Mój poprzednik używał twojego rozwiązania, nie wiem czy robił coś źle, ale w momencie zaktualizowania pliku .exe aplikacji trzeba było konfigurować na nowo.

Pozostało 580 znaków

2019-09-26 19:09
0

Tyle, że to nie moje rozwiązanie - to standardowe i powszechnie stosowane w świecie .NET.

w momencie zaktualizowania pliku .exe aplikacji trzeba było konfigurować na nowo.

Brzmi jak jakiś niezły WTF. Ten nowy exe nadpisywał magicznie plik konfiguracyjny, czy co?


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2019-09-26 19:32
0

Ja rozumiem, zwyczajnie gdzieś tam przyjąłem taki sposób i na dzień dzisiejszy nikt nie marudzi :-)

Brzmi jak jakiś niezły WTF. Ten nowy exe nadpisywał magicznie plik konfiguracyjny, czy co?

Zwyczajnie nie korzystał z istniejącego. Jeśli zrobiłem kopie pliku .exe, wkleiłem nowy, to musiałem konfigurować na nowo. Jeśli zaś wróciłem do tego samego .exe, którego skopiowałem wcześniej, to prawidłowo wczytywał i problemu nie było. Nie drążyłem tematu. Nie wiem, jakoś mi wygodniej z serializacją, jak wszystko mam ładnie w obiekcie, na start wczytane i tylko odwołuje się do odpowiedniej "sekcji" ;-)

Pozostało 580 znaków

2019-09-26 20:03
0

Panowie spokojnie ta aplikacja nie musi być extra pro po za tym im prościej tym lepiej bo jestem początkującym i łatwiej mi zrozumieć podstawę. Spróbuje to wdrożyć w program na weekendzie i dam znać czy wszystko gra.

edytowany 1x, ostatnio: adix20_20, 2019-09-26 20:04

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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