Il n y a aucune malice en tout cas.
pour tes questions :
signifie surement que ligne 126 tu utilises un objet assigné À Null. Dans un tel cas, l'utilisation du debogueur et d'un point d'arret te permettra de comprendre le pourquoi du comment.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Erreur 1 Utilisation d'une variable locale non assignée 'valret' D:\Mes documentsz\Visual Studio 2008\WebSites\WebSite1\App_Code\DataC.cs 126 20 D:\...\WebSite1\ ligne 126
signifie que depuis l'endroit ou tu cree ton erreur celui ci ne vois aps de constructeur à la classe AppExecption qui accepte un argument. Surement un probleme de visibilite de ton constructeur, a moins que tu ai omis de l'ecrire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Erreur 2 'ProjetC.AppExecption' ne contient pas un constructeur qui accepte des arguments '1' D:\Mes documentsz\Visual Studio 2008\WebSites\WebSite1\App_Code\DataC.cs 95 23 D:\...\WebSite1\ ligne 95
Je mets les numéro de ligne là où ça coince et je donne des explcations avant le code.
Donc, sur la ligne 126 : je ne peux pas utiliser le débogeur car il plante avant le lancer le site. Vu ce que tu dis, Arthis, je ne vois en quoi l'objet valret est assigné à Null, puisque je déclare cette variable au début de Méthode en faisant :
ou alors, c'est pas comme ça qu'on déclare une varaible String vide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part string valret = "";
Sur la ligne 95 : je vois pas bien. Si tu reprends la deuxième classe dans le code tu verras que le constructeur est bien là. En plus, c'est LuteceFalco qui m'a filé le bas un peu plus haut dans le topic.
Bon, je pense qu'on reprendra ça Lundi ou si vous vez le temps poster ce soir.
Enfin, bon Week-end à tous.
[/QUOTE]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data; using System.Data.SqlClient; using System.Configuration; namespace ProjetC { /// <summary> /// La classe DataC sert à créer un objet de gestion des donnée. /// Il prend en paramettre un indentifiant de chaine de connexion placée dans le web.config. /// Il contient des méthodes pour accéder facilement aux données depuis le code. /// Il gère tout le montage de la connexion et gère ses erreur avec la classe AppExecption, plus bas dans le fichier /// </summary> public class DataC { /// <summary> /// Déclaration des propriétés de la classe. /// Il faut une chaine de connexion, une DataTable et un Adapteur /// </summary> private static SqlConnection _conex; private static DataTable _table; private static SqlDataAdapter _adapteur; public static SqlConnection conex { get { return _conex; } set { _conex = value; } } public static System.Data.DataTable table { get { return _table; } set { _table = value; } } public static SqlDataAdapter adapteur { get { return _adapteur; } set { _adapteur = value; } } /// <summary> /// Création de l'objet de connexion lui même /// </summary> /// <param name="idChainCo">Identifiant de la chaine de connexion dans le web.config.</param> public DataC(string idChainCo) { string sRQ = ConfigurationManager.ConnectionStrings[idChainCo].ConnectionString; if (sRQ == "") { //throw new AppExecption("Chaine de connexion " + idChainCo + " introuvable"); } conex = new SqlConnection(sRQ); } public static DataTable RetournerTable(string requete) { table = new DataTable(); try { //On assigne une requête à la comamnde SqlCommand commande = new SqlCommand(requete); //On lui assigne une connexion commande.Connection = conex; adapteur = new SqlDataAdapter(commande); SqlCommandBuilder oCommandBuilder = new SqlCommandBuilder(adapteur); conex.Open(); adapteur.Fill(table); } catch ( Exception Ex) { LIGNE 95 throw new AppExecption(Ex); } finally { conex.Close(); } return table; } public static string RetournerScalaire(string requete) { string valret = ""; try { RetournerTable(requete); if (table.Rows.Count == 0) valret = ""; else { DataRow dt = table.Rows[0]; valret = table.Rows[0][0].ToString(); } } catch { } finally { } LIGNE 126 return valret; } } /// <summary> /// Représente une erreur qui s'est produite lors de l'execution de l'application (elle sera loguer dans un fichier log) /// </summary> /// <remarks></remarks> public class AppExecption : System.ApplicationException { /// <summary> /// Génère une exception et la logue /// </summary> /// <param name="MsgError">message de l'erreur</param> /// <remarks></remarks> AppExecption(string MsgError) : base(MsgError) { } /// <summary> /// Génère une exception et la logue /// </summary> /// <param name="aException">Objet Exception</param> /// <remarks></remarks> AppExecption(Exception aException) : base(aException.Message, aException) { } } }
Mon blog de création d'univers : Qualhiryann
Mon site qui parle de moi www.ozouf.com
Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.
Tu dois les déclarer public tes constructeurs
Saut tout le monde.
j'espère que votre wek-end a été au moins aussi bon que le mien. J'ai fait une petite fête pour mon anniversaire.
Bon, alors j'ai mis des "public" sur mes constructeur, ma variable valret renvoi bien les choses maintenant (mais je ne sais pas pourquoi ça marche mieux....).
Maintenant je rencontre un autre souci que je capte pas : je n'accède pas à mes méthodes retournerTable et REtournerScalaire.
Dans mon CodeBehind d'une apge je fais ça :
et aprés le . il ne met rien, pas d'autocompletion, que dalle.
Code : Sélectionner tout - Visualiser dans une fenêtre à part System.Data.DataTable t = new ProjetC.DataC("DataDev").;
Je comprends pas pourquoi, mes deux méthodes sont déclarées static et public (cf code plus haut dans le topic), ça devrait le faire, non ?
Mon blog de création d'univers : Qualhiryann
Mon site qui parle de moi www.ozouf.com
Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.
Moi aussi ...et pour ma numero 2 dans la foulée
Normal, si tes methodes sont statiques, tu n'y accéderas pas a partir d'une instance...
Une methode statique ne peut être appellee que depuis DataC, par exemple, ce serait :
Dans ton cas, vire le static
Code : Sélectionner tout - Visualiser dans une fenêtre à part DataTable dt = ProjetC.DataC.RetournerTable("Select * from toto");
Merci pour ton aide Philippe.
ça marche beaucoup mieu comme ça, mais j'ai du mal à suivre. En VB, je mets un Shared sur ces méthodes là. J'ai vu que l'équivalent de Shared en B était static en C#. Du coup, je pige pas pourquoi en VB je le mets et en C# je le mets pas ?
ça doit être ces histoires d'instances qui m'échappe encore. Est ce que le VB gère les choses différement du C# ?
Enfin, un petit poutou pour ta deuxième, entre taureau, on se comprend....
Mon blog de création d'univers : Qualhiryann
Mon site qui parle de moi www.ozouf.com
Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.
je suis tombé sur cette page Zoofy, ca pourrait peut être t'aider. Cela fait un joli tableau de correspondance entre vb.net et c# :
http://www.harding.edu/fmccown/vbnet...omparison.html
Merci Arthis
Je suis trés sensbile à ton attention, merci beaucoup. Ce tableau, je l'ai déjà. J'ai imprimé la version Word et il est sur mon bureau, sous ma main en permanence depuis deux semaines.
C'est surper bien foutu pour toutes ls question trés basique de translation de langage. Mais lorsqu'il s'agit de capter les subtilités sur la gestion des instance ou sur des concepts beaucoup plus fondamentaux, ben c'est pas simple.
Là, avec l'aide de Philippe, j'ai passé un gros écueil. Maintenant je vais troppiter la DataTable dans une page, histoire de voir ce que ça donne. Je pense que je vais aussi oser me faire une GridView.
Aprés, je vais carrément y aller à fond et fabriquer une contrôle utilisateur sans passer apr un ASCX. J'ai un tuto (enfin une "procédure pas à pas") de chez Micorosoft. ça m'a pas l'air sorcier, mais bon, avec moi, on ne sait jamais.....
Bon aprés midi à tous.
PS : en Bretagne il faut beau !
Mon blog de création d'univers : Qualhiryann
Mon site qui parle de moi www.ozouf.com
Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.
Bon, ben ça n'aura pas duré longtemps avant le problème suivant.
Là, j'essai de lire une DataTable achargé par ma méthode perso (j'ia testé dans l'absolu, ça marche bien). Le problème que je rencontre c'est sur les ligne de la table remontée : impossible d'accéder à l'Item de chaque ligne.
Pour fiare simple, voil àle code, tout bête, l'idée étant de mettre sur la page le contenu de la table à deux champs avec une ASp:Table pour faire la présentation :
Là il bloque sur le l1.Text = dr.Item[0];
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 DataTable t = new ProjetC.DataC("DataDev").RetournerTable("SELECT ApplicationName, ApplicationId FROM aspnet_Applications"); Table tab = new Table(); foreach (DataRow dr in t.Rows) { TableRow r = new TableRow(); TableCell c1 = new TableCell(); TableCell c2 = new TableCell(); Label l1= new Label(); Label l2= new Label(); l1.Text = dr.Item[0]; l2.Text = "l2"; c1.Controls.Add(l1); c2.Controls.Add(l2); r.Cells.Add(c1); r.Cells.Add(c2); tab.Rows.Add(r); } this.Controls.Add(tab);
J'ai forcé cette écriture car l'autocomplétion ne le propose pas.
J"ai revéfier les using, j'ai mis le System.Data qui contient la DataTable et la DataRow. J'ai bien relu mon code et j'ai testé sans faire de référence à la DataTable en mettent une valeur bidon. J'ai bien une répétition d'autant de fois que j'ai d'enregistrements dans la table dans la BDD.
Mais il veut rien savoir, il m'empêche d'accéder à l'Item qui se trouve le DataRow. Vous pouvez m'aider à comprendre pourquoi ?
Mon blog de création d'univers : Qualhiryann
Mon site qui parle de moi www.ozouf.com
Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.
Code : Sélectionner tout - Visualiser dans une fenêtre à part l1.Text = dr[0].ToString();
Merci LuteceFalco.
Mais cela implique donc que la propriété Item de DataRow, accessible en VB, ne l'est plus en C# ?
Du coup, est ce qu'il y a d'autres surprises de cet accabit ailleurs ? Parce que ça va pas être simple d'y aller en aveugle....
PS : il c'est remis à pleuvoir..... au moins je fais des économies de clim......
Et puis, Rennes, Vannes, même combat.
Mon blog de création d'univers : Qualhiryann
Mon site qui parle de moi www.ozouf.com
Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.
En fait, Item, c'est une espèce de surcharge. En vb.net le code suivant fonctionne aussi
Code : Sélectionner tout - Visualiser dans une fenêtre à part monDataSet.Tables(0).Rows(0)(0)
Ah, OK, je savais pas.
Bon, là j'ai réussi à manipuler ma DataTable, à fabriquer une Table pour faire la présentation et à charger une GridView.
Je regrette de ne pas pouvoir déclarer plusieurs varaibles à la volée genre :
faut trois lignes pour faire la même chose en C# et surtout je déplore l'absence de With....End With
Code : Sélectionner tout - Visualiser dans une fenêtre à part Dim v1, v2, v3 as String
Sinon, c'est vrai que c'est pas mal le C#. Faut juste que je prenne l'habitude et je j'arrive à bien comprendre cette histoire d'instance de classe.
Encore un grand merci à tous et votre "patience". Je me permet de laisser le topic ouvert, au cas où j'aurais besoins de revenir. Demain je me lance sur le fameux contrôle perso sans ASCX......
tin, tin, tin, ça être coton.....
Mon blog de création d'univers : Qualhiryann
Mon site qui parle de moi www.ozouf.com
Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.
Tu peux déclarer plusieurs variables du même type sur une ligne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2string chaine1, chaine2, chaine3;
Oui, mais cette formulation va m'obliger à faire trois lignes de plus pour définir une valeur vide.
Ce que j'aurais aimé faire c'est ça :
Sauf que ça marche pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part string v1, v2, v3 = new string();
Mon blog de création d'univers : Qualhiryann
Mon site qui parle de moi www.ozouf.com
Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager