C# Jedna aplikacja obsługująca kilka baz danych

0

Witam.

Zacznę od początku. Otóż napisałem program (C#, VS2010) na własne potrzeby, który służy jako baza danych klientów (SQŁ Server Database). Teraz potrzebuje druga bazę danych, z tymi samymi polami, ale chciałbym, żeby była obsługiwana przez ten sam program. Myślałem o czymś w postaci okna powitalnego na którym będą dwa przyciski do wyboru, w zależności który wybiorę uruchomi się ten sam program z wybraną bazą danych.

I tutaj moje pytanie, czy coś takiego jest w ogóle możliwe do zrobienia i praktyczne? Czy rozwiązalibyście to w jakiś inny łatwiejszy sposób. Ogólnie to muszę mieć możliwość wyboru bazy danych w jednym programie. Bazy mają te same rekordy, ale nie mogą być powiązane ze sobą.

Z góry dziękuję za wszystkie odpowiedzi. Pozdrawiam.

0

Jest to do zrobienia.

Ale widzę logiczny paradoks w twoim opisie:

  1. „Bazy mają te same rekordy”

  2. dodajesz rekord do jednej bazy lub z niej usuwasz.

  3. „[bazy] nie mogą być powiązane ze sobą”

ergo…
4. bazy nie mają tych samych rekordów!!!111stojedenaście.

0

Zapewne autorowi chodzi o to, że istnieją dwie bazy danych o identycznej strukturze i chciałby aby przy starcie programu użytkownik wskazał, z której bazy chce korzystać. Jeśli o to właśnie chodzi to oczywiście coś takiego jest możliwe. Wystarczy stworzyć mechanizm zapisywania informacji o parametrach połączenia z każdą z baz danych (możemy to nazwać profilami baz danych) i zaraz po starcie ale przed połączeniem się z bazą danych dać użytkownikowi możliwość wyboru profilu bazy danych.

0

Tak dokładnie "Squash" o to mi chodziło, przepraszam za nazewnictwo... Jestem w trakcie próby ogarniania tego wszystkiego. A mógłbym prosić o bardziej szczegółowy opis Twojego rozwiązania? Jakiś przykład może gdzieś widziałeś? Cokolwiek?

0

Robiliśmy identyczny mechanizm. Kodu Ci nie podeślę, bo jest częścią większego systemu ale sam mechanizm jest przecież banalny (pomijam ewentualnie kwestie bezpieczeństwa).
Zapis profili baz danych można zrealizować trzymając dane w lokalnych plikach lub np w rejestrze.
Rozważając trzymanie danych o profilach w plikach można to zrobić np tak

  1. Tworzymy folder na lokalnym kompie np DB_Profiles
  2. Dodajemy w tym folderze plik tekstowy o nazwie takiej jak profil bazy danych
  3. W tym pliku tekstowym wprowadzamy dane potrzebne do połączenia z bazą danych (forma zapisu dowolna)
  4. Program przy starcie odszukuje folder DB_Profiles, wczytuje nazwy plików i wyświetla ja np w jakim combbox'ie
  5. User wybiera dany plik z tego combox'a i naciska przycisk Start
  6. Program odczytuje zawartość tego pliku i danych z niego używa do połączenia z bazą danych

KONIEC :)

0

O taki szczegółowy opis prosiłem, rozumiem już jak to zrobić. Takiego tutka potrzebowałem. Jestem winien Ci piwko :) Dziękuję serdecznie za pomoc. Pozdrawiam

Napotkałem w ostatnim punkcie mały problem, otóż wszystko udało mi się po kolei zrobić tak jak napisałeś, aczkolwiek nie wiem teraz, jak w SqlConnection podać zamiast sztywnej ścieżki do bazy wartość przeze mnie wybraną w ComboBox'ie

Form1 (z ComboBox'em)

 
public partial class Login : Form
    {
        Form1 f1;
        public string contents;

        public Login()
        {
            InitializeComponent();
        }

        private void Login_Load(object sender, EventArgs e)
        {
            f1 = new Form1(this);

            DirectoryInfo dinfo = new DirectoryInfo(@"DB_Profiles\");
            comboBox1.DataSource = dinfo.GetFiles();
        }

        public void button1_Click(object sender, EventArgs e)
        {
            FileInfo file = (FileInfo)comboBox1.SelectedItem;
            contents = File.ReadAllText(file.FullName);
                        
            f1 = new Form1(this);
            f1.Show();
        }
    }

Form2 (główny program, połączenie z bazą)

 
public partial class Form1 : Form
    {
        Login login;
        Insert insert;
        Update update;
        Delete delete;

        string sciezka;

        //Połączenie między programem a baza danych w Microsoft SQL Server
        SqlConnection cn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Adrian\Documents\Visual Studio 2010\Projects\BazaTest\BazaTest\DATABASE1.MDF;Integrated Security=True;User Instance=True");
        SqlCommand cmd = new SqlCommand();
        SqlDataReader dr;        

        public Form1(Login login)
        {
            this.login = login;
            InitializeComponent();  
            sciezka = login.contents;          
        }

        private void Form1_Load(object sender, EventArgs e)
        {            
            cmd.Connection = cn;
            loadlist();

            update = new Update(this);
            delete = new Delete(this);
        }

        public void loadlist()
        {
            listBox1.Items.Clear();
            listBox2.Items.Clear();

            cn.Open();
            cmd.CommandText = "SELECT imie, nazwisko FROM info ORDER by imie";
            dr = cmd.ExecuteReader();
            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    listBox1.Items.Add(dr[0].ToString());
                    listBox2.Items.Add(dr[1].ToString());
                }
            }
            cn.Close();
        }

Nie wiem jak w Data Source wstawić "contents" z Form1 z właściwą bazą danych (Nie chodzi mi o powiązanie (zależność) Form1 z Form2, bo to już zrobiłem. chodzi mi tylko o to jak zastąpić sztywną ścieżkę stringiem "contents". Mam nadzieje, że wyraziłem się jasno :) hehe

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