Ca tombe bien! Y'a pas besoin de diplômes pour lire la doc!
http://msdn.microsoft.com/en-us/library/9b9dty7d.aspx
Version imprimable
Ca tombe bien! Y'a pas besoin de diplômes pour lire la doc!
http://msdn.microsoft.com/en-us/library/9b9dty7d.aspx
Ne soit pas sarcastique comme ça.
Un tableau de int je sais faire (quand même !) mais un tableau de SQLParameter, je vois même pas par quel bout le prendre, c'est là mon souci.
8O Ben pour le coup, je sais pas quoi répondre car il n'y a pas de différences entre les deux :?
Ben répondre un truc dans ce gout là aurait été sympa :
Mais je crois voir que le C# est réservé à une élite, merci, je m'en souviendrais.Code:SqlParameter[] parameter = { new SqlParameter(...), new SqlParameter(...), new SqlParameter(...) };
Merci Immobilis, c'est beaucoup plus clair comme ça et en plus, l'exemple que j'ai trouvé est visiblement pas bon.
Toutefois, décidément, y a plein de truc que je comrpends pas, ça veut toujours pas le prendre. J'ai relu le code trois fois pour être sur de ne pas avoir fait de faute de syntaxe et je vois pas pourquoi ça passe pas. Je comprends pas le terme "instance".
Donc le code est là pour le moment :
Donc, un tableau de SQLParameter (y en a qu'un seul, mais c'est pas grave) visiblement correctement mis en place et un appel à la fonction avec les argument correct.Code:
1
2
3 SqlParameter[] LParam = new SqlParameter[0]; LParam[0] = new SqlParameter("urlsite", urlsite); DataTable VerifSite = new SystemC.AccessData().RetournerTable("EXEC CORE_VerifSiteExiste @urlsite",LParam);
Ben à la compilation il me dit cela :
Et là, Instance, type..... ???Citation:
Erreur 1 Le membre 'SystemC.AccessData.RetournerTable(string, System.Data.SqlClient.SqlParameter[])' est inaccessible avec une référence d'instance*; qualifiez-le avec un nom de type D:\inetpub\SystemC\Default.aspx.cs 31 31 http://www.systemc.maison/
Désolé, mais je capte pas un brock de ce qu'il voudrait avoir.
Y'a pas une histoire d'élite, y'a juste faire les trucs dans l'ordre... Apprendre les bases quand on commence peut être un bon début. Je n'ai jamais fait de C# à l'école, vaguement du Java de loin mais même pas de quoi avoir le niveau d'un débutant. Mon niveau actuel je le dois au fait que j'ai lu des bouquins et tutos sur les bases avant de me lancer.
Si je suis aussi sarcastique c'est qu'on en est à la 6è page de ce fil et que je suis pas sur qu'il y ait une seule réponse qui ne soit pas documenté sur la doc (tant sur la syntaxe C# que sur les membres d'une classe...). Alors la première fois, je veux bien expliquer quel est la syntaxe d'un catch en attachant un lien vers la doc mais au bout d'un moment je peux pas lire toute la doc à ta place.
La encore, je te renvois vers le tutoriel http://tahe.developpez.com/dotnet/csharp/ car c'est essentiel de comprendre la différence entre un objet, classe, type, instance. A vrai dire, c'est même une question éliminatoire pour un entretien pour un poste de développeur (que ca soit VB.Net, C#, C++ ou Java).
C'est toujours pas pour paraitre prétentieux, c'est juste que c'est vraiment la base quoi...
Pour la réponse à la question, je dirais que tu as qualifié ta méthode comme statique et que par conséquent tu ne peux pas l'appeller avec une instance de ta classe. Il faut par conséquent transformer ta méthode en une méthode d'instance ou ne pas l'appeller sur une instance.
Merci Immobilis.
Bon, j'ai viré le static dans la définition de la fonction et du reste, je ne sais pas ce qu'il est venu faire là, mon autre fonction pour retourner une valeur scalaire ne l'a pas. Faut d'inatention ou copier coller furieux.....
Maintenant tout fonctionne, je vais pouvoir me concentrer sur le montage de la page.
Par contre, juste un détail par rapport à ton code sur le montage d'un tableau de SQLParameter. Je reprends le code pour mémoire :
Là tu définis à tableau et avec le chiffre 1 entre crochet à la première ligne tu dis que le tableau va contenir une seule ligne.Code:
1
2
3 SqlParameter[] sp = new SqlParameter[1]; sp[0] = new SqlParameter("@ID", 123); sp[1] = new SqlParameter("@NAME", "Immobilis");
Donc, litérallement ton code présenté là serait faux, c'est bien ça ?
Parce que j'ai suivi l'idée et j'avais mis 0 mais il m'a fait une erreur OutOfRange. Du coup, j'ai mis 1 et c'est mieux passé.
C'est juste pour confirmer et être sûr d'avoir compris le binioux, les tableaux c'est pas mon fort.
Encore merci Immobilis
Pour l'histoire du static/instance : ta méthode RetournerTable n'a aucune raison d'être statique, surtout que les autres méthodes de la classe ne le sont pas...
Pour résumer : une instance d'une classe, c'est juste une "réalisation" de cette classe. Une classe est en quelque sorte un "moule", une instance est un "gateau" que tu sors de ce moule... Avec un seul moule, tu peux faire autant de gateaux que tu veux.
Un membre (méthode, propriété, etc) statique d'une classe n'est pas lié à une instance de la classe, c'est un membre de la classe elle-même. Par exemple :
La méthode Titi est statique, tu l'appelles directement via le nom de la classe : Toto.Titi();. Par contre, Tata est une méthode d'instance (non-statique), il te faut donc une instance de la classe pour l'appeler : Toto x = new Toto(); x.Tata();. Les méthodes d'instance ont accès aux autres membres de l'instance courante, ce qui n'est pas le cas des méthodes statiques (puisqu'il n'y a pas d'instance).Code:
1
2
3
4
5
6
7
8
9
10
11 class Toto { public static void Titi() { } public void Tata() { } }
Sinon pour l'histoire du tableau de SqlParameter : pour simplifier un peu l'écriture, tu peux déclarer la méthode avec un nombre variable de paramètres :
Comme ça lors de l'appel tu peux passer directement les paramètres, sans les mettre explicitement dans un tableau :Code:
1
2
3
4 public DataTable RetournerTable(string rq, params SqlParameter[] param) { ... }
Ah, et encore un truc : évite d'écrire du code comme ci-dessus, où tu appelles une méthode sur un objet que tu crées dans la même instruction. Ca réduit la lisibilité, et ça a tendance à te faire oublier que tu viens de créer une instance de la classe... Utilise plutôt des variables intermédiaires :Code:new Dmanager("DataDev").RetournerTable("SELECT ...", new SqlParameter(...), new SqlParameter(...), ...)
Code:
1
2 Dmanager db = new Dmanager("DataDev"); DataTable table = db.RetournerTable(....);
Meci Tomlev, ton explication "patissière" est trés claire, j'aime beaucoup et j'ai bien compris.
Un mot sur le static : comme j'ai dis, je n'ai aucune idée de pourquoi il s'est retrouvé là, il n'aurait jamais du y être.
Un autre mot sur nombre d'élément du tableau : en VB c'est pareil, c'est le nombre d'élément (ou la borne supérieure) que l'on spécifie à cet endroit.
Je vais boucler ce topic qui devient un peu trop long et s'éparpille un poil.
Aujourd'hui je plonge dans le coeur de mon système, maintenant que j'ai les outils de base traduit en C# je devrais pouvoir m'en sortir et rencontrer d'autre souci.
Je vais manipuler la page elle-même et je vais m'exposer à des choses un peu nouvelle car je vais tenter d'optimiser ce que je faisais en VB. Aprés trois ans d'utilisation de mon système j'ai vu des trucs qui me perturbaient. Du coup, je vais tenter de faire du ménage pour être plus logique et surtout plus direct dans mon code.
Par exemple, j'avais une classe PageY qui n'était appellée qu'une seule fois à partir de ma page Default.aspx. Je pense intégrer le code de cette classe directement dans le codeBehind de la page, vu que c'est la seule et unique page du site.
J'avais pensé à faire une vraie classe page dérivant de l'objet Page du FrameWork, mais je n'en vois pas l'intérêt tel que mon système est pensé.
Et aussi, je vais tâter du MemberShip, mais là, j'ai encore à apprendre je crois, parce que, même en VB, j'ai pas encore compris la profondeur de la bestiole.
Conclusion : merci à tout pour votre gentillesse et votre patience.
Bah non, c'est pas pareil... si tu veux déclarer un tableau de 10 éléments en C#, tu fais ça :
Code:int[] tableau = new int[10];
Alors qu'en VB tu fais ça :
(si tu mets 10 tu obtiens un tableau de 11 éléments)Code:Dim tableau(9) As Integer
Donc en VB c'est bien la borne supérieure et non le nombre d'éléments...
Si si, c'est bien ça. Par défaut c'est 0.
Et les propos de tomlev sont juste aussi (sauf dans le cas où on indique Option Base 1, ce qui est, je crois, assez rarement utilisé).
Oui, mais cette option n'existe plus en VB.NET, les index commencent toujours à 0 (sauf cas très particulier en utilisant cette surcharge de Array.CreateInstance, mais il n'y a pas de support direct dans le langage (que ce soit en VB ou en C#) pour les tableaux qui ne commencent pas à 0)