Inny sposób wprowadzania danych do metody MySqlConnection.

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)
        {

        }

    }

}
0

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

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)?

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");
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; ?

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.

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ą.

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.

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?

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" ;-)

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