Class générique de connection aux base de données [Résolu]

Signaler
Messages postés
13
Date d'inscription
mardi 27 janvier 2004
Statut
Membre
Dernière intervention
24 juin 2006
-
Messages postés
393
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
23 mars 2007
-
Bonjour,

(je débute en C# )

Je voudrais créer une classe générique pour mon application pour me connecter à n'importe quelle base de données ( entre autres Access et SQl server 2005 express).

J'ai donc écrit cette classe :

class

MyDataBase{

private
string _ConnectionString;

private
string _Server;

private
string _DataSource;

//private string _Provider;

private
string _User;

private
string _Pwd;

private
Type _typeofdb;

private
Type _typeofdbcom;

private
Type _typeofdbdataadapt;

private
int _Bd;

/*Objet de traitement de la base de données*/

private
DbConnection _dbconnect;

private
DbCommand _dbcommand;

private
DbDataAdapter _dbdataAdapter; 

/*Constante Des types de bases de données accessible*/

public
const
int DATABASE_ACCESS = 0;

public
const
int DATABASE_SQLSERVEUR2005E=1;

public
const
int DATABASE_SQLSERVEUR=2;

public
const
int DATABASE_ORACLE = 3;

/*Constante de retour d'erreur*/

public
const
int DB_ERROR_CONNECTIONOK = 0;

public
const
int DB_ERROR_CONNECTIONFAILED = 1;

public
const
int DB_ERROR_DBUNKNOW = 2;

public MyDataBase(
int BD,
string server,
string user,
string pwd,
string db){

_Bd = BD;

switch (_Bd){

case DATABASE_ACCESS:{

_DataSource = db;

_ConnectionString =

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="";_ConnectionString += db +

"";User ID=admin";_typeofdb =

typeof(
OleDbConnection);_typeofdbcom =

typeof(
OleDbCommand);_typeofdbdataadapt=

typeof(
OleDbDataAdapter);}

break;

case DATABASE_SQLSERVEUR2005E:{

_Server = server;

_DataSource = db;

_User = user;

_Pwd = pwd;

_ConnectionString =

"Data Source=.\" + server +
";AttachDbFilename="" + db+
"";User ID=" + user +
";pwd=" + pwd +
";Connect Timeout=30;User Instance=False";_typeofdb =

typeof(
SqlConnection);_typeofdbcom =

typeof(
SqlCommand);_typeofdbdataadapt =

typeof(
SqlDataAdapter);

 }

break;

default:{

_ConnectionString =

"";}

break;}

}

public
int Connect(){

if (_ConnectionString ==
"")
return DB_ERROR_DBUNKNOW;

try{

_dbconnect = (

DbConnection)
Activator.CreateInstance(_typeofdb);_dbconnect.ConnectionString = _ConnectionString;

_dbconnect.Open();

return DB_ERROR_CONNECTIONOK;}

catch (
Exception e){

System.

Console.WriteLine(e.Message);

return DB_ERROR_CONNECTIONFAILED;}

}

public
int Close(){

try{

_dbconnect.Close();

return DB_ERROR_CONNECTIONOK;}

catch (
Exception e){

System.

Console.WriteLine(e.Message);

return DB_ERROR_CONNECTIONFAILED;}

}

public
DataSet OpenTable(
string table){

_dbdataAdapter = (
DbDataAdapter)
Activator.CreateInstance(_typeofdbdataadapt,
"Select * from " + table, _dbconnect);

// Création d'un DataSet

DataSet ds =
new
DataSet();

// Remplissage du DataSet avec le DataAdapter_dbdataAdapter.Fill(ds, table);

return ds;}

 

}

J'appel dans mon appli deux connexions :

La première sur mon serveur local sql serveur 2005 express qui se passe très bien.
MyDataBase

db =
new
MyDataBase(
MyDataBase.DATABASE_SQLSERVEUR2005E,
"SQLEXPRESS",
"sa",
"pwd",
"(....)Agenda.mdf");db.Connect();

db.OpenTable(

"Action");db.Close();

Et la deuxieme sur Access. La connection se fait correctement , mais j'obtiens une erreur sur la ligne " _dbdataAdapter.Fill(ds, table) " de la fonction opentable.

L'erreur retournée indique que la clause from n'est pas correcte. Pourtant la requete est tout à fait correct si je l'execute directement sous access, et fonctionne sur sqlserver.

MyDataBase db2 =
new
MyDataBase(
MyDataBase.DATABASE_ACCESS,
"",
"admin",
"",
"(....)Agenda.mdb");db2.Connect();

db2.OpenTable(

"Action");db2.Close();

Pourriez vous m'aider s'il vous plait?

Tytia

4 réponses

Messages postés
13
Date d'inscription
mardi 27 janvier 2004
Statut
Membre
Dernière intervention
24 juin 2006

C'est bon, j'ai trouver mon erreur :

en fait Dans Access la table que j'avais nomée Action doit correspondre à un mot protégé. Je l'ai renomée en Actions et cela fonctionnne.

Merci quand même pour cette réponse très réactive. :)

Tytia
Messages postés
393
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
23 mars 2007

Pour le première erreur , essaye ceci :
_dbdataAdapter.Fill(ds);

_________________________________________________________________________
Woot
Alias Wouter Tjon.
Messages postés
393
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
23 mars 2007

Ensuite déclare table comme étant le premier tableau de ta base comme ceci :
DataTable

table = ds.Tables[0];

_________________________________________________________________________
Woot
Alias Wouter Tjon.
Messages postés
393
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
23 mars 2007

;) niquel
Et de rien

_________________________________________________________________________
Woot
Alias Wouter Tjon.