Probléme requete LINQ par rapport a une boucle tant que

Signaler
-
 Damiens29 -
Bonjour,

je cherches a recuperer des éléments dans une textbox d'autocompletion via une requete Linq mais je ne sais pas du tous comment m'y prendre.

Code de mon autocompletion :

//Chaine permettant de ramener les éléments de ma requéte.
string[] suggestions = { };


private void t_numdeco_TextChanged(object sender, EventArgs e)
        {
            if (!textChanging)
            {
                textChanging = true;
                string prefix = "";
                string text = t_numdeco.Text;
                bool changed = false;

                if (lastText.Length < text.Length && text.EndsWith(" "))
                {
                    prefix = text;
                    changed = true;
                }
                else if (lastText.Length < text.Length && lastText.EndsWith(" ") && text.Contains(" "))
                {
                    prefix = text.Substring(0, text.LastIndexOf(' '));
                    changed = true;
                }

                if (changed)
                {
                    autoComplete.ReleaseAutoComplete();
                    autoComplete new CustomSource(suggestions.Where(t> !prefix.Split().Contains(t)).Select(t => prefix + t).ToArray());

                    autoComplete.Bind(t_numdeco);
                }

                textChanging = false;

            }


Requete SQL que je souhaiterais utiliser pour faire ma requete LINQ :

 connexion.Open();
                lock (this)
                    using (var command = new SqlCommand("SELECT * FROM dbo.T_Projets", connexion))
                    {
                        SqlDataReader dr = command.ExecuteReader();
                        while (dr.Read())
                        {
                            collec.Add(dr["CodeProjet"].ToString());
                        }
                        dr.Close();
                        dr.Dispose();
                    }
                connexion.Close();


Merci d'avance car je suis vraiment perdu !

17 réponses

salut @Damien29,

ta question par rapport aux:
connexion.Open();
lock (this)
using (var command = new SqlCommand("SELECT * FROM dbo.T_Projets", connexion))
{
SqlDataReader dr = command.ExecuteReader();
while (dr.Read())
{
collec.Add(dr["CodeProjet"].ToString());
}
dr.Close();
dr.Dispose();
}
connexion.Close();


je n'arrive pas à te comprendre ce que tu veut avoir

int mindongo
while (dr.Read())
{
collec.Add(dr["CodeProjet"].ToString());
}
dr.Close();
dr.Dispose();


que fait ton
dr.Dispose()?????


while (dr.Read())
{
collec.Add(dr["CodeProjet"].ToString());
}
dr.Close();

c'est déjà bon jusque là
int mindongo
Salut !

ca,c etait pour faire l'autocompletion.
En fait,j'aimerais juste savoir comment récuperer cette donnée(CodeProjet) par rapport a mon string[] suggestions = { " " };

 

//Chaine permettant de ramener les éléments de ma requéte. 
string[] suggestions = { }; 


private void t_numdeco_TextChanged(object sender, EventArgs e) 
{ 
if (!textChanging) 
{ 
textChanging = true; 
string prefix = ""; 
string text = t_numdeco.Text; 
bool changed = false; 

if (lastText.Length < text.Length && text.EndsWith(" ")) 
{ 
prefix = text; 
changed = true; 
} 
else if (lastText.Length < text.Length && lastText.EndsWith(" ") && text.Contains(" ")) 
{ 
prefix = text.Substring(0, text.LastIndexOf(' ')); 
changed = true; 
} 

if (changed) 
{ 
autoComplete.ReleaseAutoComplete(); 
autoComplete new CustomSource(suggestions.Where(t> !prefix.Split().Contains(t)).Select(t => prefix + t).ToArray()); 

autoComplete.Bind(t_numdeco); 
} 

textChanging = false; 

} 

Requete SQL que je souhaiterais utiliser pour faire ma requete LINQ :

 
connexion.Open(); 
lock (this) 
using (var command = new SqlCommand("SELECT * FROM dbo.T_Projets", connexion)) 
{ 
SqlDataReader dr = command.ExecuteReader(); 
while (dr.Read()) 
{ 
collec.Add(dr["CodeProjet"].ToString()); 
} 
dr.Close(); 
dr.Dispose(); 
} 
connexion.Close(); 
while (dr.Read()) 
{ 
collec.Add(dr["CodeProjet"].ToString()); 
} 


collec c'est quoi svp mon pot

int mindongo
normalement tu peut faire:
while (dr.Read()) 
{ 
collec.Item.Add(dr["CodeProjet"].ToString()); 
} 

si au moin tu m'expliquait ton Controle ou quoi nommé "collec"
int mindongo
svp Item #Items:
c'est comme cà
while (dr.Read()) 
{ 
collec.Items.Add(dr["CodeProjet"].ToString()); 
} 


int mindongo
Collec :
    AutoCompleteStringCollection collec = new AutoCompleteStringCollection();

C'est pour ca qu'il n'y a pas besoin d'avoir d'items.
ok, quand tu lance y a t-il un message quelconque ?? ou ton collec affiche rien??
int mindongo
Non mais mon collec n'a rien a voir avec ca.
Faut même pas le prendre en compte.
C'etait juste un exemple pour expliquer ce que je voulais que ma requete me raméne dans mon string[] suggestions.

C'est juste qu'il faut passer par des requétes LINQ et que je ne m'y connais pas du tous en fin de compte et que j'aimerais bien qu'on m'explique un ptit peu.
Toujours Toujours personnes ???
Messages postés
15148
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
27 novembre 2020
462
Bonjour, je ne fais pas de sql, donc je ne répondrais pas à ta question.

Si ton besoin est de faire de d'autocompletion avec une textbox, regarde du coté des propriétés AutoCompleteCustomSource, AutoCompleteMode, AutoCompleteSource.

Mais ton titre parle de requete Lind ou est elle?
Linq pourra sans doute t'aider à réinventer l'amérique, mais que les données viennent du sql, d'access, de xml qu'elles soit présentées sous forme de List<T>, de dataset ou datareader pour Linq ca ne change rien.

Donc centre biebn ta question sur cette requette (si c'est bien là ton problème)

Whismeril
Je gére déjà des autocompletion mais celles ci me raménent des erreurs une fois sur deux (memory is corrupt).

J'essaye donc d'utiliser une autre solution mais cette partie de code me bloque :

if (changed) 
{ 
autoComplete.ReleaseAutoComplete(); 
autoComplete new CustomSource(suggestions.Where(t> !prefix.Split().Contains(t)).Select(t => prefix + t).ToArray()); 
autoComplete.Bind(t_numdeco); 
} 


Mon but etant de ramener les valeurs de ma textbox dans cette chaine de caractére :

//Chaine permettant de ramener les éléments de ma requéte. 
string[] suggestions = { }; 


Et c'est là où je bloque aussi.
Messages postés
15148
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
27 novembre 2020
462
Sans même avoir vérifié comment on se sert de CustomSource, cette ligne
autoComplete new CustomSource(suggestions.Where(t> !prefix.Split().Contains(t)).Select(t => prefix + t).ToArray());

présuppose que suggestions contienne des données.

Or si
string[] suggestions = { }; 
ça ne peut pas fonctionner.

Whismeril
Messages postés
15148
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
27 novembre 2020
462
Ta requette est obscure pour moi, ne sachant pas ce qu'est prefix je ne vois pas ou tu veux en venir

En prenant cet exemple msdn, j'ai refait le test et le textbox affiche bien la liste des mois commençant par le texte saisi.

Whismeril
Ah bien,ton exemple msdn est très clair mise a part que je dois ramener des valeurs d'une BDD.

Je vais l'essayer tout a l'heure en essayant d'intégrer une requete et je te tiens au courant si je m'en suis sorti.

Dans mon :
string[] suggestions = { }; 

Lorsque j'ajoute des données en dure,ca fonctionne très bien mais mon souci et juste que je ne vois pas comment intégrer ma requete dans cette chaine de données.

je te remercie en tous les cas pour ton code.
Messages postés
15148
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
27 novembre 2020
462
Dans mon :
Code C# :
string[] suggestions = { };

Lorsque j'ajoute des données en dure,ca fonctionne très bien mais mon souci et juste que je ne vois pas comment intégrer ma requete dans cette chaine de données.


Ok, moi ce que je ne comprends pas c'est que veux tu faire avec ta requête?

Whismeril
Ben en fait,les données de ma requéte,c'est ce qui va me permettre de faire ma recherche dans mon autocompletion.Au lieu de selectionné des données que j'ai intégré en dure, je vais aller chercher les données de ma requéte.