Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Connektiranje na više baza

[es] :: .NET :: Connektiranje na više baza

[ Pregleda: 2926 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Neznalica_sa_ugla
split

Član broj: 83282
Poruke: 390
*.adsl.net.t-com.hr.



Profil

icon Connektiranje na više baza09.07.2008. u 20:56 - pre 192 meseci
Imam program , koji se konektira na ms sql2005, i verziju koja se konektira na acces, zatim sam napravio verziju koja radi sa obe baze ali sam u kodu pravio if( baza="sql") <kod > if (baza="acc") <kod> to svaki put kada pravim konekciju , read ili data set i to mi je malo bezveze .Htio sam naoraviti jednu klasu koja bi mi vratila konekciju , reader , ili data set zavisno od vrijednosti varijable baza i to onoga tipa sql ili oledb , a poslije u cijelom programu koristio taj obijekt . Ali to nikako da uspijem .Probao sam sa #if , sa template , ..... . Da li ima neko neke preporuke ??? Unaprijed hvala.
 
Odgovor na temu

bags

Član broj: 10072
Poruke: 715
*.12.15.tuwien.teleweb.at.



+2 Profil

icon Re: Connektiranje na više baza09.07.2008. u 21:13 - pre 192 meseci
Jesi li probao sa staticnom klasom na nivou aplikacije?
Free advice is seldom cheap.
 
Odgovor na temu

Neznalica_sa_ugla
split

Član broj: 83282
Poruke: 390
*.adsl.net.t-com.hr.



Profil

icon Re: Connektiranje na više baza09.07.2008. u 21:32 - pre 192 meseci
Da, ali mi problem koji obijekt vraca, moram ga definirati , a kada to ucinim onda moze biti drugi tip obijkta i prijavi gresku :
 
Odgovor na temu

sallle
Sasa Ninkovic
GTECH
Beograd

Član broj: 146
Poruke: 480
*.adsl.beotel.net.

ICQ: 20785904


+4 Profil

icon Re: Connektiranje na više baza10.07.2008. u 01:36 - pre 192 meseci
dve ideje:

1. koristi oledb drajver (i za mssql i za access), samo menjaj konekcioni string

2. u aplikaciji koristi staticke metode (koje ce u svom telu da imaju if (mssql) kod, if (acc) kod)
public static DataTable GetTable()
public static int ExecuteCmd()
public static int ExecuteSP
...
 
Odgovor na temu

Neznalica_sa_ugla
split

Član broj: 83282
Poruke: 390
*.adsl.net.t-com.hr.



Profil

icon Re: Connektiranje na više baza10.07.2008. u 10:48 - pre 192 meseci
PA taj slucaj sa if imam i bas mi izgled nezgrapno i ruzno , i sa puno if , if , if .Mislio sam kod uciniti preglednijim , i kvalitetnijim .Imam pusto ifova samo po sebi , (progrma ima preko 40 *.cs i svaki ima preko nekoliko stotina linija - do nekolko hiljada ) i kada dodam ovo izgleda stvarno traljavo , s tim da u svaku cs moram ukljuciti oledb i sql .Mislio sam da na nivou aplikacije postoji jednostavnije riješenje . Recimo klasa koja vrati tip veze , tim ridera , tip dataseta , zavisno od neke varijable koju i onako imamam u Registru
u kome jeste definirano koju ce bazu koristiti . Problem nastaje sa pisanjem te klase.. Ako ima jos ko kakvu ideju ......
 
Odgovor na temu

Shaggy
Miša Simić
Beograd

Član broj: 89502
Poruke: 29
*.static.sbb.rs.



Profil

icon Re: Connektiranje na više baza10.07.2008. u 11:59 - pre 192 meseci
Problem bi mogao da resis sa Interface-om

Definises interface IBaza koji ima metode GetDataTable, ExecuteScalar, ExecuteNonQuery, ExecuteSP... koje vec metode imas u tvojoj aplikaciji

Onda napravis dve klse koje nasledjuju IBaza

Jedna Klasa npr SQLBaza ce u svojim metodama imati kod koji radi sa SQL Bazom, a AccessBaza klasa ce u metodama imati kod koji radi sa AccessBazom
(Posto kalse nasledjuju interface IBaza one moraju imate metode - GetDataTable, ExecuteScalar, ExecuteNonQuery, ExecuteSP... ili se kod nece kompajlirati...)

I jedna klasa koja ce ti vracati odredjeni objekat u zavisnosti od settings-a:

npr:
public class DBCreator
public static IBaza GetDataBase()
{
IBaza baza = null;
if (SQL)
baza = new SQLBaza();
else
baza = new AccessBaza();
return baza;
}

Posle u drugim delovima aplikacije kad god treba da radis za bazom kazes:

IBaza baza = DBCreator.GetDataBase();
DataTable dt = baza.GetDataTale("SELECT * FROM TABELA");
DataGrid1.DataSource = dt;


Nadam se da je dovoljno od pomici...

Pozdrav,

Misa
Misa Simic
MCSD .NET
 
Odgovor na temu

Neznalica_sa_ugla
split

Član broj: 83282
Poruke: 390
*.xnet.hr.



Profil

icon Re: Connektiranje na više baza16.07.2008. u 14:42 - pre 191 meseci
Jos kakvih ideja, pa zar niko to nije pokusao?????
 
Odgovor na temu

Shaggy
Miša Simić
Beograd

Član broj: 89502
Poruke: 29
*.static.sbb.rs.



Profil

icon Re: Connektiranje na više baza16.07.2008. u 16:22 - pre 191 meseci
Hm... Jesi li pokusao uopste ovo gore opisano?

To je standardan metod za resavanje problema Razlicitih Baza

Jedna aplikacija radi potpuno isto - bez obzira koja je baza u pozadini...


Misa Simic
MCSD .NET
 
Odgovor na temu

Neznalica_sa_ugla
split

Član broj: 83282
Poruke: 390
*.xnet.hr.



Profil

icon Re: Connektiranje na više baza16.07.2008. u 20:06 - pre 191 meseci
Bicu iskren nisam, odgovor sam video tek poslije kada sam napisao poruku .Sada cu to prtobati !!!
 
Odgovor na temu

Neznalica_sa_ugla
split

Član broj: 83282
Poruke: 390
*.xnet.hr.



Profil

icon Re: Connektiranje na više baza16.07.2008. u 20:34 - pre 191 meseci
Cini mi se ovo obecava , ali problem : ExecuteNonQuery() kako to implementirati????
Kako stvoriti obijekte : konekcije, komande , dataset ?

[Ovu poruku je menjao Neznalica_sa_ugla dana 17.07.2008. u 02:55 GMT+1]
 
Odgovor na temu

Neznalica_sa_ugla
split

Član broj: 83282
Poruke: 390
*.xnet.hr.



Profil

icon Re: Connektiranje na više baza22.07.2008. u 14:45 - pre 191 meseci
Ljudi ovo nisam rjesio , POMAGAJ TE ::
 
Odgovor na temu

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
79.101.87.*

Jabber: DarkMan


Profil

icon Re: Connektiranje na više baza22.07.2008. u 20:41 - pre 191 meseci
Evo to primer klase kojom mozes da se konektujes na tri baze: MS Sql Server, Sql Server Compact Edition i Access.

Code:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.Data.SqlServerCe;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
    public sealed class SQL
    {
        public static string CreateConnectionString(string server, string username, string password, string database)
        {
            int timeout = 10;
            server = (server != null && server.Length > 0 ? "Data Source=" + server + ";" : "Data Source=(local);");
            string login = "Integrated Security=SSPI;";
            if(username != null && username.Length > 0) {
                if(password != null && password.Length > 0)
                    login = "User ID=" + username + ";Password=" + password + ";";
                else
                    login = "User ID=" + username + ";Password=\"\";";
            }
            string catalog = "Initial Catalog=" + (database != null && database.Length > 0 ? database : "master");
            return server + login + catalog + (timeout > 0 ? ";Connect Timeout=10" : "");
        }

        public static string CreateConnectionString(string fileName, string password)
        {
            if(!string.IsNullOrEmpty(fileName)) {
                string cs = "Data Source=" + fileName;
                if(password != null && password.Length > 0) cs += ";Password=" + password + ";";
                return cs;
            }
            return "";
        }

        public static ConnectionStringType GetConnectionStringType(string connectionString)
        {
            if(!string.IsNullOrEmpty(connectionString)) {
                string connectionStringLower = connectionString.ToLower();
                if(connectionStringLower.Contains(".sdf")) return ConnectionStringType.SqlServerCe;
                if(connectionStringLower.Contains(".mdb")) return ConnectionStringType.Access;
                return ConnectionStringType.SqlServer;
            }
            return ConnectionStringType.None;
        }

        public static DbConnection GetConnection(string connectionString)
        {
            switch(GetConnectionStringType(connectionString)) {
                case ConnectionStringType.SqlServer:
                    return new SqlConnection(connectionString);
                case ConnectionStringType.SqlServerCe:
                    return new SqlCeConnection(connectionString);
                case ConnectionStringType.Access:
                    return new OleDbConnection(connectionString);
            }
            return null;
        }

        public static DbDataAdapter GetDataAdapter(string connectionString, string query)
        {
            switch(GetConnectionStringType(connectionString)) {
                case ConnectionStringType.SqlServer:
                    return new SqlDataAdapter(query, connectionString);
                case ConnectionStringType.SqlServerCe:
                    return new SqlCeDataAdapter(query, connectionString);
                case ConnectionStringType.Access:
                    return new OleDbDataAdapter(query, connectionString);
            }
            return null;
        }

        public static DbCommand GetCommand(string connectionString, string query)
        {
            DbConnection connection = GetConnection(connectionString);
            if(connection != null) {
                switch(GetConnectionStringType(connectionString)) {
                    case ConnectionStringType.SqlServer:
                        return new SqlCommand(query, connection as SqlConnection);
                    case ConnectionStringType.SqlServerCe:
                        return new SqlCeCommand(query, connection as SqlCeConnection);
                    case ConnectionStringType.Access:
                        return new OleDbCommand(query, connection as OleDbConnection);
                }
            }
            return null;
        }

        public static DataTable ExecuteQuery(string connectionString, string query)
        {
            DataTable dataTable = new DataTable();
            DbDataAdapter adapter = null;
            try {
                adapter = GetDataAdapter(connectionString, query);
                if(adapter != null) adapter.Fill(dataTable);
            } catch(Exception ex) {
                MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            if(adapter != null) try { adapter.Dispose(); } catch { }
            return dataTable;
        }

        public static int ExecuteNonQuery(string connectionString, string statement)
        {
            if(!string.IsNullOrEmpty(statement)) {
                DbConnection con = null;
                DbCommand cmd = null;
                int result = -1;
                try {
                    con = GetConnection(connectionString);
                    con.Open();
                    cmd = con.CreateCommand();
                    cmd.CommandText = statement;
                    result = cmd.ExecuteNonQuery();
                } catch(Exception ex) {
                    MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                if(cmd != null) try { cmd.Dispose(); } catch { }
                if(con != null) try { con.Close(); con.Dispose(); } catch { }
                return result;
            }
            return 0;
        }


        public static void DisplayDataTable(DataTable table)
        {
            Form form = new Form();
            DataGridView grid = new DataGridView();
            grid.DataSource = table;
            grid.Dock = DockStyle.Fill;
            form.Controls.Add(grid);
            form.Size = new Size(800, 600);
            form.StartPosition = FormStartPosition.CenterScreen;
            form.ShowDialog();
            grid.Dispose();
            form.Dispose();
        }
        
    }

    public enum ConnectionStringType
    {
        None,
        SqlServer,
        SqlServerCe,
        Access
    }
}



Evo ti primer konektovanja na Sql Server.
Code:

            string connectionString = SQL.CreateConnectionString("", "", "", "PROBA");
            DataTable dataTable = SQL.ExecuteQuery(connectionString, "select * from dbo.sysobjects"); 
            SQL.DisplayDataTable(dataTable);


Nadam se da ce ti pomoci.
Pozdrav.
 
Odgovor na temu

Neznalica_sa_ugla
split

Član broj: 83282
Poruke: 390
*.xnet.hr.



Profil

icon Re: Connektiranje na više baza25.07.2008. u 01:15 - pre 191 meseci
Da ,ovo je pomoglo . HVALA .
Sam sam kriv koliko izmjena ?? *--- auuu */-
Ipak puno hvala !!!!
 
Odgovor na temu

[es] :: .NET :: Connektiranje na više baza

[ Pregleda: 2926 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.