Poslao: 10 Maj 2009 11:54
|
offline
- eca
- Zaslužni građanin
- Pridružio: 24 Feb 2007
- Poruke: 631
|
Radim aplikaciju koja treba da cita Table1 iz baze MojaBaza, s tim da se MojaBaza nalazi uvek na istom mestu i uvek se isto zove, ali je u pitanju 50-tak razlicitih baza (koje stizu na flesh-u). Kako da napravim konekciju koja vidi bilo koju bazu koja se donese?
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 10 Maj 2009 17:09
|
offline
- snoop
- Genghis Khan
- Pridružio: 18 Apr 2003
- Poruke: 8134
- Gde živiš: U kesici gumenih bombona...
|
Moras da menjas Connection String za svaku od tih baza kao i provider koji se koristi za tu bazu.
Npr. za MSSQL se koristi SqlConnection class, za Access OdbcConnection itd.
Nisam siguran, ali mozda se moze koristiti OdbcConnection class za bilo koju bazu, pa samo menjas connection string gde je potrebno.
Ne znam na koji nacin si ti uradila pristup bazi.
Sto se tice pozicije baze, za mssql, mysql, oracle... nije bitno gde se nalazi, nego connection string odredjuje na kom serveru i kojoj bazi ce pristupiti.
Za vise detalja oko raznih baza mozes pogledati -> http://connectionstrings.com/
Za takvu automatiku bi ti bilo najbolje da imas jednu interface class koja instancira ostale klase koje se ticu baza koje ti trebaju.
Na taj nacin bi uz izmenu na jednom mestu, mogla koristiti bilo koju bazu.
Nadam se da ce ovo pomoci.
|
|
|
|
Poslao: 10 Maj 2009 18:11
|
offline
- eca
- Zaslužni građanin
- Pridružio: 24 Feb 2007
- Poruke: 631
|
Nisam bila dovoljno precizna. Radi se o Access bazi u svakom slucaju, ali ne moze da se uradi konekcija preko wizarda nego programski, jer ima puno raznih malih baza i ne zna se kada ce koja biti aktuelna.
Kako da program prepozna bazu "Relacije" i u njoj tabelu Table1, ako se ona uvek nalazi na istom mestu.
con.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Relacije.mdb";
con.Open();
RelacijeDataAdapter = new OleDbDataAdapter("Select * From Table1", con);
OleDbCommandBuilder RelacijeCommandBuilder = new OleDbCommandBuilder(RelacijeDataAdapter);
RelacijeDataAdapter.Fill(Table1);
Sve lepo radi kada vezem preko wizarda, ali kada se promeni baza, sve puca.
|
|
|
|
Poslao: 10 Maj 2009 19:29
|
offline
- snoop
- Genghis Khan
- Pridružio: 18 Apr 2003
- Poruke: 8134
- Gde živiš: U kesici gumenih bombona...
|
Iskreno, ne radim, a i nisam radio sa wizardima, data setovima, data adapterima itd. nego sve manuelno, tako da oko toga ne mogu nista pomoci.
Elem, malo pre sam uradio to sto ti zelis na ovaj moj nacin i radi bez problema:
using System.Data.Odbc;
private void button1_Click(object sender, EventArgs e)
{
OdbcConnection con;
OdbcCommand cmd;
OdbcDataReader dr;
con = new OdbcConnection("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" + Application.StartupPath + "/" + textBox1.Text + ".mdb;");
con.Open();
cmd = new OdbcCommand("Select * From Table1", con);
dr = cmd.ExecuteReader();
while (dr.Read())
{
MessageBox.Show(dr["Field1"].ToString());
}
con.Close();
}
Probaj umesto ovog tvog connection stringa da ubacis ovaj moj ili probaj koristiti Odbc umesto OleDb.
|
|
|
|
Poslao: 12 Maj 2009 13:15
|
offline
- eca
- Zaslužni građanin
- Pridružio: 24 Feb 2007
- Poruke: 631
|
Napisano: 10 Maj 2009 19:47
Hvala Snoop, probacu po tvom receptu!
Dopuna: 10 Maj 2009 20:13
Uh, nesto mi se zbrljalo. Verovatno imam zaostale repove starog koda. Moram to pazljivo da pregledam i da precistim, pa onda da probam, ili jos bolje, da napravim neki probni programcic (da bude mali i pregledan) za vezbanje.
Dopuna: 12 Maj 2009 13:15
Evo, ovo je konacno resenje (runtime konekcija na bazu Relacije koja moze biti bilo koja baza koju nazovem Relacije i kopiram je na isto mesto)
Na formi je samo 1 dugme (button1) i 1 listbox (lb) gde ispisujem bilo kolonu po zelji, da proverim Tabelu1.
using System.Data.OleDb;
namespace RadSaBazom
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
OleDbConnection Myconnection = null;
OleDbDataReader dbReader = null;
Myconnection = new OleDbConnection (@"Provider=Microsoft.Jet.OLEDB.4.0; User Id=; Password=; Data Source=C:\Relacije.mdb");
Myconnection.Open();
DataTable Table1 = new DataTable();
OleDbCommand cmd = Myconnection.CreateCommand();
cmd.CommandText = "SELECT * FROM Table1";
dbReader = cmd.ExecuteReader();
string Trenutna;
while(dbReader.Read())
{
Trenutna = (string)dbReader.GetValue(10);
lb.Items.Add(Trenutna);
Myconnection = null;
Myconnection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; User Id=; Password=; Data Source=C:\Relacije.mdb");
Myconnection.Open();
}
dbReader.Close();
Myconnection.Close();
}
}
}
|
|
|
|
Poslao: 12 Maj 2009 13:35
|
offline
- snoop
- Genghis Khan
- Pridružio: 18 Apr 2003
- Poruke: 8134
- Gde živiš: U kesici gumenih bombona...
|
Drago mi je da si sredila.
A zasto na dva mesta otvaras konekciju?
|
|
|
|