Récupération donnée Oracle

cs_jonathanC Messages postés 17 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 8 février 2008 - 4 févr. 2008 à 09:59
cs_jonathanC Messages postés 17 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 8 février 2008 - 8 févr. 2008 à 08:37
Bonjour,

j'utilise cette classe :
http://www.csharpfr.com/code.aspx?ID=25671
dans une webpart C#, le déploiement se fait bien apres quelque bidouillage. mais j'ai 2 questions :
où est-ce que l'on indique la requete SQL a effectué?(perso j'ai rajouter une ligne : sQuery =" select ....";

et deuxième question :
comment est-ce que l'on manipule les donnée de l'objet qui contient le résultat de notre requete?
merci

13 réponses

leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
4 févr. 2008 à 10:05
Si ma mémoire ne me joue pas de tours, je dirais que cette source est obsolète. A priori, si tu utilise le dernier DAC oracle, tu peux utiliser dataset, dataadapter, et autres objets hauts niveaux qui vont te permettre de te générer tout le code adéquat (et te résoudre toutes les questions que tu te pose et t'éviter d'écrire tes requêtes directement dans ton code, avec les contraintes et risques que ca comporte).
0
cs_jonathanC Messages postés 17 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 8 février 2008
4 févr. 2008 à 10:12
Bonjour,
merci pour cette réponse, cependant ça fait 2 semaine que je fais du C# et je ne suis pas encore familier :s
pourrais-tu me détaillé un peu plus ta réponse :s

sur la doc de microsoft j'ai trouvé ça :

public DataSet SelectOracleSrvRows(DataSet dataset,string connection,string query)
{
    OracleConnection conn = new OracleConnection(connection);
    OracleDataAdapter adapter = new OracleDataAdapter();
    adapter.SelectCommand = new OracleCommand(query, conn);
    adapter.Fill(dataset);
    return dataset;
}

cependant je ne comprend pas comment renseigné les paramètre de connection, ainsi que la requete a effectué.
 
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
4 févr. 2008 à 10:30
dans l'IDE, tu peux cliquer droit sur ton projet pour ajouter un nouveau dataset a ton projet. classiquement, cela te permet de mapper tes tables de base de données sur des objets générés via un mode graphique. Cependant, oracle n'est pas géré nativement pour ca, et il te faut installer le DAC (data access component) oracle (que tu pourra trouver aisément sur le net).
A partir de la, il te suffit de paramétrer correctement ta chaine de connection a la base de données, puis tu pourra tout faire en mode graphique (le mappage base de données/objets C#, les requêtes en évitant de les mettre dans le code en dur avec les problèmes de sécurité que cela comporte, etc...)
Bref, deux choses a rechercher pour toi :
1 - utilisation des datasets
2 - interopérabilité oracle et datasets

Tu trouvera (normalement) pour les deux un tas de tutoriels/codes sources/questions sur des forums.
0
cs_jonathanC Messages postés 17 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 8 février 2008
4 févr. 2008 à 10:45
hm

public

DataSet SelectOracleSrvRows(
DataSet dataset,
string connection,
string query){
connection "Provider msdaora; Data Source =CHAINE_HOTE ; User Id = UTILISATEUR; Password = MDP";query =

"select * from intranet_employe";

OracleConnection conn =
new
OracleConnection(connection);

OracleDataAdapter adapter =
new
OracleDataAdapter();adapter.SelectCommand =

new
OracleCommand(query, conn);adapter.Fill(dataset);

return dataset;}

je récupère donc le résultat de ma requête sous forme d'un dataset, il faut que je traite le résultat pour une webpart donc je ne suis pas sur de vouloir utiliser sous la forme d'un mode graphique.

En gros ce que je souhaiterai c'est de pouvoir récupérer les employé 1 a 1, et de les ajouter dans mon organigramme ( tree) en fonction de leur service.

Donc il me reste à trouver comment manipuler les dataset. ( d'ailleur comment pourrais-je tester si mon dataset a bien été rempli correctement ?)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
4 févr. 2008 à 11:34
Le mode graphique te sert simplement a toi, codeur, d'éviter de te frapper tout le code et que ledit code soit généré. Tu "dessine" ta table comme dans ta BD, tu paramètre ta requête via l'éditeur, qui se chargera pour toi de la sécurité etc...Ca t'évitera lors de tes requêtes d'avoir des failles de sécurité, de perdre un temps fou a mapper tes tables (ou d'avoir des dataset faiblement typés avec la lourdeur et le manque de propreté/maintenabilité que cela engendre).
utiliser DataSet (tel que et non dérivé) c'est comme utiliser une Form telle que...c'est possible, mais c'est un non sens (d'un point de vue POO). du moins pour l'utiliser pour autre chose que du polymorphisme et retyper fortement par la suite...
Après si tu souhaite faire comme ci dessus, libre a toi, mais personnelement je te le déconseille vivement.
0
cs_jonathanC Messages postés 17 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 8 février 2008
4 févr. 2008 à 11:52
Le mode graphique te sert simplement a toi, codeur, d'éviter de te frapper tout le code et que ledit code soit généré.

hm oui le pb(en tant que stagiaire) c'est qu'il faudra que j'explique a la ligne pres le code généré, d'ou mon envie de le taper moi même.

Ca t'évitera lors de tes requêtes d'avoir des failles de sécurité, de perdre un temps fou a mapper tes tables (ou d'avoir des dataset faiblement typés avec la lourdeur et le manque de propreté/maintenabilité que cela engendre).

je voudrais creer une webpart pour WSS, avec un simple select sur une table d'employé pour générer un organigramme. Au risque de paraitre stupide et sans vouloir te froissé, je ne vois pas quelles failles de sécurité je pourrais avoir?

utiliser DataSet (tel que et non dérivé) c'est comme utiliser une Form telle que...c'est possible, mais c'est un non sens (d'un point de vue POO). du moins pour l'utiliser pour autre chose que du polymorphisme et retyper fortement par la suite...

aie ça devrait me parlé, mais ça me dépasse un peu là

Après si tu souhaite faire comme ci dessus, libre a toi, mais personnelement je te le déconseille vivement.

Ce que je souhaite, c'est de récupérer de manière simple mes employés, faire une boucle pour les service, inclure une seconde boucle pour les employés, et généré ainsi mon arbre.
En php ça m'aurait pris 3 sec, et en C# ça me fait déprimé..
Mon stage arrive à sa fin et il faut absolument que je finisse ma webpart...
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
4 févr. 2008 à 13:35
si cest pour expliquer le code a la ligne pret, le C# n'est peut-etre pas le choix de langage le plus judicieux, puisque le langage se base bcp sur l'IDE et que la quantité de code généré peut être franchement conséquente...(avis personnel hein ^^)

pour le coté sécurité, si tu n'as qu'une requête sans paramètres pas de soucis, effectivement, cependant je peux pas deviner qu'il n'y a que cette requête (et que ton projet n'en contient pas d'autres). Au moindre paramètre le risque sera la.

pour le coté "ca te dépasse" je voulais simplement dire que si tu utilise ton dataset sans utiliser le code généré, tu vas utiliser la classe DataSet telle que. Cest comme si pour typer un int, un string, ou un double, pour les 3 tu utilisais des "object" et que tu t'en foutais du type réel sous jacent. Ca fonctionne, ca semble peut être pratique dans le cas particulier de ton appli (exemple hein), mais conceptuellement parlant c'est un non sens, et ca ne colle pas du tout avec le langage.

utiliser un dataset, t'aurais rien de plus simple....Juste une série de clicks et fournir a l'IHM les noms des tables et des champs, la chaine de connection, la requête, et terminé...Moi le faire en C# ca me prendrais 3 secondes et en PHP ca me déprime... :)
0
cs_jonathanC Messages postés 17 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 8 février 2008
4 févr. 2008 à 14:09
si cest pour expliquer le code a la ligne pret, le C# n'est peut-etre pas le choix de langage le plus judicieux, puisque le langage se base bcp sur l'IDE et que la quantité de code généré peut être franchement conséquente...(avis personnel hein ^^)



avis que je respecte, a vrai dire je dois réaliser un intranet avec sharepoint et pour rajouter des fonctionnalité j'ai voulu coder des webpart, je n y connais absolument rien en developpement .net, mon tuteur non plus donc je me débrouille un peu tout seul, et quand j'ai demandé en quel langage je devais programmer mes webpart on m a orienté vers le C#...

pour le coté sécurité, si tu n'as qu'une requête sans paramètres pas de soucis, effectivement, cependant je peux pas deviner qu'il n'y a que cette requête (et que ton projet n'en contient pas d'autres). Au moindre paramètre le risque sera la.

c'est vrai autant pour moi ...en fait j'ai une requete ou je vais chercher mes employé et ensuite je voudrais rajouter ces employé a mon tree.( c'est tout ^^ )

pour le coté "ca te dépasse" je voulais simplement dire que si tu utilise ton dataset sans utiliser le code généré, tu vas utiliser la classe DataSet telle que. Cest comme si pour typer un int, un string, ou un double, pour les 3 tu utilisais des "object" et que tu t'en foutais du type réel sous jacent. Ca fonctionne, ca semble peut être pratique dans le cas particulier de ton appli (exemple hein), mais conceptuellement parlant c'est un non sens, et ca ne colle pas du tout avec le langage.

oui là ca me parle beaucoup mieu, ça aurait du me parler dès le début ( honte à moi ) mais j'ai des petits trou :)

utiliser un dataset, t'aurais rien de plus simple....Juste une série de clicks et fournir a l'IHM les noms des tables et des champs, la chaine de connection, la requête, et terminé...Moi le faire en C# ca me prendrais 3 secondes et en PHP ca me déprime... :)

lol, ouai si j arrivais à le faire en le codant, ça m'arrangerai ^^ est-ce que ma connection marche même si la bdd n'est pas sur le meme serveur que sharepoint?( je sais qu'en php je n'ai pas besoin de renseigner l'ip du serveur mais en C# je suis pas sur .. :p )

si ma connection est bonne, il faut que je trouve le moyen, de récupérer et d'afficher mon dataset...^^
0
cs_jonathanC Messages postés 17 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 8 février 2008
4 févr. 2008 à 16:08
ça y est je déprime... voila mon code, déja j'ai l'impression que ma connection ne marche pas..En tout cas quand je déploie ma webpart, sharepoint bug...

Le data source dans la connection string, c'est la Chaine_hote qu'il faut mettrre ou bien le nom de la table?

using System;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Serialization;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
using System.Data;
using System.Data.OracleClient;
using System.Web;
using System.Collections;




namespace WebPart4
{


[Guid("0781047e-d071-48d9-9ce7-463997e752ab")]
public class WebPart4 : System.Web.UI.WebControls.WebParts.WebPart
{

public WebPart4()
{
this.ExportMode = WebPartExportMode.All;
}

public DataSet SelectOracleSrvRows(DataSet dataset, string connection, string query)
{

connection "Provider msdaora; Data Source = Chaine_HOTe? ; User Id = Identifiant ; Password = MDP";
query = "select * from intranet_employe";

OracleConnection conn = new OracleConnection(connection);


OracleDataAdapter adapter = new OracleDataAdapter();
adapter.SelectCommand = new OracleCommand(query, conn);


adapter.Fill(dataset);
return dataset;


}



DataSet dataset = null;
string valeur = null;
string connection = null;
string query = null;


protected override void CreateChildControls()
{

this.Controls.Clear();
TreeView tree = new TreeView();
this.Controls.Add(tree);

TreeNode rootNode = new TreeNode("AQUITANIS");
TreeNode firstNode = new TreeNode("Direction Générale");
TreeNode secondNode = new TreeNode("Direction des ressources Humaines");
TreeNode thirdNode = new TreeNode("Direction Financière");
TreeNode fourthNode = new TreeNode("Direction de la Location");
TreeNode fifthNode = new TreeNode("Direction du Patrimoine");

tree.Nodes.Add(rootNode);
rootNode.ChildNodes.Add(firstNode);
rootNode.ChildNodes.Add(secondNode);
rootNode.ChildNodes.Add(thirdNode);
rootNode.ChildNodes.Add(fourthNode);
rootNode.ChildNodes.Add(fifthNode);


rootNode.SelectAction = TreeNodeSelectAction.None;
firstNode.SelectAction = TreeNodeSelectAction.None;
secondNode.SelectAction = TreeNodeSelectAction.None;
thirdNode.SelectAction = TreeNodeSelectAction.None;
fourthNode.SelectAction = TreeNodeSelectAction.None;
fifthNode.SelectAction = TreeNodeSelectAction.None;



DataSet ds = SelectOracleSrvRows(dataset, connection, query);


foreach (DataRow dr in ds.Tables[0].Rows)
{

// Remplace "nom_colonne" par le nom d'une des colonnes de ta table ORACLE

valeur = dr["nom"] as string;

this.Page.Response.Write(valeur);


}


}







}


}


help :(
0
cs_jonathanC Messages postés 17 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 8 février 2008
5 févr. 2008 à 08:52
Bonjour à nouveau, marche toujour pas, est-ce que le fait que la bdd oracle ne soit pas sur le même serveur que mon script puisse changer quelque chose? si oui quoi? :p
0
cs_jonathanC Messages postés 17 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 8 février 2008
5 févr. 2008 à 09:38
:(:(:(:(:(:(:(
j'ai pris le tnsnames.ora du serveur, j'ai récupérer les information et les ai recopier dnas le tnsnames.ora du serveur "client"
et ça marche toujours pas :(:(:(:(:(:(:(:(
0
cs_jonathanC Messages postés 17 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 8 février 2008
6 févr. 2008 à 16:38
Est-ce que quelqun s'y connaitrait avec le fichier web.Config?

j'ai changer le trust level = full
mais ça ne marche tjrs pas...
alors peut être que je dois ajouter la connection string à mon fichier web.config mais je trouve pas la syntaxe exacte ...
0
cs_jonathanC Messages postés 17 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 8 février 2008
8 févr. 2008 à 08:37
Bon j'ai fais un script à part pour tester mon script de connection, et ce dernier MARCHE ! mais quand je le réinjecte dans ma webpart ben ça marche plus...
Plz help me :(
0
Rejoignez-nous