2010-05-05 5 views
0

HI! Je voudrais comparer les valeurs d'une zone de texte avec les données d'une table. J'ai essayé ce code mais j'ai eu l'erreur que la chaîne d'entrée était dans le mauvais format! code:Comparaison de la valeur de la zone de texte à la base de données

string connectionString = 
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=save.mdb"; 

try 
{ 

    database = new OleDbConnection(connectionString); 
    database.Open(); 
    string queryString = "SELECT zivila.naziv,users.user_name FROM (obroki_save " 
     + " LEFT JOIN zivila ON zivila.ID=obroki_save.ID_zivila) " 
     + " LEFT JOIN users ON users.ID=obroki_save.ID_uporabnika " 
     + " WHERE users.ID='" +Convert.ToInt16(id.iDTextBox.Text)+"'"; 
    loadDataGrid(queryString); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
    return; 
} 
+1

Êtes-vous sûr que la zone de texte est tous les chiffres? Peut-être utiliser int.TryParse à la place. –

+0

Lisez aussi sur la protection de Sql Injection! Ceci est un exemple classique du potentiel d'injection Sql! http://en.wikipedia.org/wiki/SQL_injection –

+0

Assez juste. Était juste suivi. Peeps nouveau sur ce site oublient souvent de suivre les questions posées. –

Répondre

0

votre connectionstring devrait ressembler à ceci:

Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C: \ MyDatabase.mdb; ID utilisateur = admin, Mot de passe =;

Pour plus d'informations sur connectionStrings vous pouvez trouver sur connectionstrings.com

0

lors de la construction de votre sql, vous essayez de concaténer une chaîne et une valeur Int16. essayez de supprimer le Convert.ToInt16(), en ne laissant que la valeur de la chaîne de caractères.

+0

je reçois une erreur dans l'expression conditionnelle (c'est ce que le programme dit) – simon

0

Essayez de changer votre dernière ligne à

+ " WHERE users.ID=" +Convert.ToInt16(id.iDTextBox.Text); 

enlever essentiellement les guillemets simples du monde Int16

+0

je reçois et une erreur dans la syntaxe sql – simon

0

Vous pouvez essayer ceci:

string connectionString = 
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=save.mdb"; 

try 
{ 
     Int16 id = Int16.Parse(id.iDTextBox.Text); 

    database = new OleDbConnection(connectionString); 
    database.Open(); 
    string queryString = "SELECT zivila.naziv,users.user_name FROM (obroki_save " 
     + " LEFT JOIN zivila ON zivila.ID=obroki_save.ID_zivila) " 
     + " LEFT JOIN users ON users.ID=obroki_save.ID_uporabnika " 
     + " WHERE users.ID=" + id.ToString(); 
    loadDataGrid(queryString); 
     database.Close(); 
} 
catch (FormatException fex) 
{ 
    MessageBox.Show(fex.Message); 
    return; 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
    return; 
} 

De cette façon, vous intercepter des données incorrectes et protégez-vous contre Sql Injection.

Aussi, n'oubliez pas de Fermer votre connexion, ou lire sur le using keyword.

Essayez aussi d'exécuter la requête avec un identifiant hardcoded dans votre éditeur de SQL pour vous assurer qu'il fonctionne:

SELECT zivila.naziv,users.user_name 
FROM (obroki_save AS os LEFT JOIN zivila AS z ON z.ID=os.ID_zivila) 
LEFT JOIN users ON users.ID=obroki_save.ID_uporabnika 
WHERE users.ID=16 
+0

je reçois toujours la même erreur (chaîne d'entrée dans un mauvais format) – simon

+0

un encore obtenir l'erreur. Zut. – simon

0

si votre champ ID est un entier, vous ne devriez pas mettre "autour d'elle.

donc changer

+ " WHERE users.ID='" +Convert.ToInt16(id.iDTextBox.Text)+"'"; 

à

+ " WHERE users.ID=" +Convert.ToInt16(id.iDTextBox.Text); 
Questions connexes