2010-09-07 9 views
1
foreach (string str in TestWords) 
{ 
    //spam 
    SqlCommand cmd6 = new SqlCommand("select count from keys,files,folders where keys.fileid=files.id and keys.kname='" + str + "' and files.spam=1 and folders.id<>" + FolIter + " and files.folderid<>" + FolIter + " and files.id='" + s[0].ToString + "'", cn); 
    int i6 = Convert.ToInt16(cmd6.ExecuteScalar()); 
    double temp = Convert.ToDouble((i6 + 1)/(i7 + i8)); 
    //non spam 

    **error** 

    SqlCommand cmd9 = new SqlCommand("select count from keys,files,folders where keys.fileid=files.id and keys.kname='" 
    + str 
    + "' and files.spam=0 and folders.id<>" 
    + FolIter 
    + " and files.folderid<>" 
    + FolIter 
    + " and files.id='" 
    + s[0].ToString 
    + "'", cn); 
    int i9 = Convert.ToInt16(cmd9.ExecuteScalar()); 
    temp2 = Convert.ToDouble((i9 + 1)/(i7 + i8)); 
    Sdoc = Convert.ToDouble(Sdoc * temp); 
    NsDoc = Convert.ToDouble(NsDoc * temp2); 
} 

Le iam d'erreur s'est: opérateur '+' ne peut pas être appliqué aux opérandes de type 'string' et 'groupe méthode'C# error sqlCommand

+0

Fournir quelle ligne l'erreur se produit serait utile, et le reste de la portée. – Kolky

+1

Qu'est-ce que c'est exactement * FolIter *? – slugster

+2

Deux choses: 1) qu'est-ce que 'FolIter', et 2) (et celui-ci est important): faites un peu de lecture sur SQL Injection (commencez ici, par exemple: http://msdn.microsoft.com/fr-fr/ magazine/cc163917.aspx), et les étapes à suivre pour l'éviter. Votre code est largement ouvert pour de telles attaques. –

Répondre

2

Vous utilisez la méthode ToString() comme la propriété

changement s[0].ToString ->s[0].ToString()

Rappelez-vous que C# ne le permet pas.

9

Vous devez appeler la méthode:

s[0].ToString() 
7

Comme mentionné dans Nix, Femaref et Azhar, .ToString() est la faute de frappe qui déclenche le message d'erreur. Puis-je suggérer d'utiliser des paramètres plutôt qu'une concaténation de chaînes? De cette façon:

SqlCommand cmd9 = new SqlCommand("select count from keys,files,folders where keys.fileid=files.id and [email protected] and and files.spam=0 and folders.id<>@FolIter and files.folderid<>@FolIter and [email protected]", cn); 

cmd9.Parameters.Add(new SqlParameter("@name", str)); 
cmd9.Parameters.Add(new SqlParameter("@FolIter", FolIter)); 
cmd9.Parameters.Add(new SqlParameter("s0", s0)); 

De cette manière, ADO.NET traitera votre variable est, vous avez l'habitude de les convertir en chaîne à utiliser concaténation, et vous être exposé à un risque wont SQL injection.