2009-01-13 13 views
0

Donc, j'ai une méthode qui effectue une requête LIKE paramétrée. La méthode prend le paramètre/valeur de recherche dans, puis elle est ajoutée à la commande prête pour la requête.La requête paramétrée est interrompue lors de l'exécution de la condition LIKE. Pourquoi?

Cela ne fonctionne pas. Ça devrait marcher, et quand je code la valeur à rechercher directement dans la chaîne SQL, sans paramétrage, ça marche! Quand je l'ai comme paramètre n'est pas! Des idées.

Voici quelques exemples (faux, j'ai changé les noms) exemple de code.

myDataReader = SQLExecute("SELECT * FROM TableOfAwesomeness WHERE BestTVShow LIKE 'Arrested Development%'") 

Fonctionne. Cependant

Function MethodOfReturningHorror(ByVal TVShow as String) as SqlDataReader 
{ 
dim command as new SQLCommand 
command.connection = sqlconnection 
command.CommandText = "SELECT * FROM TableOfAwesomeness WHERE BestTVShow LIKE '@tvShow%'" 
command.Parameters.Add("tvShow",TVShow) 

return command.ExecuteReader() 
} 

J'ai manqué le code sans rapport avec la question par souci de paresse/concision. Donc, ignorez le bit de retour et tout le reste, tout ce qui est important est que le lecteur de données ne contienne rien, alors que c'est le cas dans le premier exemple. Je suis sûr que cela a à voir avec le paramétrage de la clause LIKE.

Merci!

Répondre

6

Essayez ceci:

command.CommandText = "SELECT * FROM TableOfAwesomeness WHERE BestTVShow LIKE @tvShow + '%'" 
+0

Cheers! Je vais essayer cela – Damien

3

Essayez le annexant « % » à la fin de la chaîne de paramètres plutôt que d'intégrer dans le sql.

0

@tvShow est une variable et vous l'utilisez dans une chaîne. Ce serait l'équivalent de ce en C#:

var tvShow = "5th Wheel"; 
var netwokAndShow = "Fox tvShow"; 
Console.WriteLine(networkAndShow); // Prints 'Fox tvShow', not 'Fox 5th Wheel' 

Vous voulez ressembler:

LIKE @tvShow + '%' 
1

Essayez ce, afin d'assurer que la valeur que vous vérifiez contre est une valeur varchar, et ne pas dire un type entier:

command.CommandText = "SELECT * FROM TableOfAwesomeness WHERE BestTVShow LIKE convert(varchar(100), @tvShow) + '%'" 

J'ai eu quelques problèmes lors de T-SQL réalise une conversion de type natif et concaténation de chaînes.

(évidemment changer "varchar (100)" pour être tout ce qui fonctionne dans votre instance: vos types de données, votre durée prévue)

+0

Si vous configurez vos paramètres pour inclure des informations de type sur le code client, ce n'est pas un problème. –