2009-11-16 14 views
0

J'ai récemment été chargé de mettre à niveau une application de .net 1.1 à 3.5 et suis tombé sur un RowFilter sur un DataView qui avait un comportement différent entre les deux versions.Différence entre ADO.NET 1.0 et 3.5 en utilisant RowFilter et les chaînes?

Voici mon bloc de code dans 1.1 qui fonctionne dans 1.1 mais pas 3.5. Je reçois l'erreur suivante en essayant d'exécuter ceci en 3.5 "Impossible d'exécuter '=' opération sur System.String et System.Int32" Les deux 1.1 et 3.5 frappent la même base de données, je suis juste confus quant à la façon dont 1.1 voit la chaîne paramètre et le traite comme une chaîne sans avoir à mettre des marques de tic autour de lui mais en 3.5 il voit rptNum et vous oblige à mettre des tics autour de lui. Le champ dans le dv est une chaîne DataType.

private DataView BuildDataView(string rptNum) { 
     DataView dv = null; 

     if(dt != null) { 
      dv=new DataView(dt); 
      dv.RowFilter="reporting_number = " + rptNum; 
     } 

     return dv; 
    } 

Voici mon bloc de code dans 3.5 modifié pour que cela fonctionne. J'ai dû ajouter des marques de tic autour du paramètre de chaîne afin qu'il le traite comme une chaîne.

private DataView BuildDataView(string rptNum) { 
     DataView dv = null; 

     if(dt != null) { 
      dv=new DataView(dt); 
      dv.RowFilter="reporting_number = '" + rptNum + "'"; 
     } 

     return dv; 
    } 

Répondre

0

Vu le message d'erreur:

"Cannot perform '=' operation on System.String and System.Int32 

on dirait que la valeur de rptNum provoquant l'erreur est numérique (bien que la colonne de type String): juste une supposition, mais peut-être la version 1.1 ressemble d'abord à la valeur de la variable dans le filtre et pardonne assez pour le traiter si la clause de filtre peut être interprétée comme donnée par l'utilisateur, alors que dans 3,5 le cast de type a la priorité. Avez-vous le message d'erreur si rptNum n'est pas numérique lorsqu'il est exécuté dans la version 1.1 de votre code?

+0

Non Je ne reçois pas le message d'erreur. – TampaRich

+0

OK, cela voudrait dire que la vérification de type n'a pas lieu "à l'avance" dans 1.1, ce qui semble être le cas dans 3.5. – davek