2011-02-10 2 views
3

J'ai le code qui ressemble à ce qui suit dans une classe qui étend MembershipProvider (code ci-dessous a été légèrement anonymisées et simplifié):Pourquoi mes requêtes paramétrées ne fonctionnent-elles pas dans ASP.NET?

SqlConnection conn = new SqlConnection("Integrated Security=;Persist Security Info=False;User ID=WEBUSER;Password=WEBPASSWORD;Initial Catalog=DATABASENAME;Data Source=SERVERNAME"); 
SqlCommand cmd = new SqlCommand("SELECT Password FROM Membership " + 
    " WHERE Username = ?", conn); 

cmd.Parameters.Add("@Username", System.Data.SqlDbType.NVarChar, 25).Value = "TestUser"; 

SqlDataReader reader = null; 

try 
{ 
    conn.Open(); 
    reader = cmd.ExecuteReader(); // Execution breaks here. 

Les pauses de code quand il est à cmd.ExecuteReader(); L'exception étant levée est "System.Data.SqlClient.SqlException: syntaxe incorrecte près de"? "."

Il semble se comporter comme si le "?" dans le texte de commande n'est pas correctement interprété comme un paramètre. Je ne peux pas comprendre ce que je fais mal. J'avoue que mon ASP.NET est un peu rouillé, mais j'ai écrit du code comme ça des dizaines de fois auparavant, et tout ce que j'ai écrit ci-dessus ressemble aux modèles d'utilisation que je vois dans les tutoriels et dans les exemples MSDN. Quelqu'un peut-il me dire ce que je fais mal?

La version .NET cible est 4.0. ASP.NET est exécuté sur ma machine locale dans l'environnement de débogage dans Visual Web Developer express 2010. La base de données est SQL Server 2005.

+0

Quelqu'un a passé trop de temps à utiliser Interbase;) –

+0

@Neil Non! Attends ... oui. –

Répondre

5

Le ' ? ' La syntaxe, pour autant que je sache, est la syntaxe ODBC. Ici, vous utilisez une connexion directe à Sql. Utilisez '@Username' à la place.

+0

Oui. C'était ça! Je ne peux pas croire que je ne pouvais pas comprendre cela. Je suppose que j'ai généralement utilisé le code ODBC auparavant et je n'ai pas réalisé que ce que je faisais cette fois était différent. –

+0

+1 pour fournir l'explication supplémentaire de POURQUOI c'est différent. Bravo à vous. – David

5

changement

WHERE Username = ? 

à

WHERE Username = @Username 
+0

C'est ce qu'il a fait. Merci! –

+0

Merci. Les deux réponses étaient correctes, super utiles et affichées plus ou moins en même temps. Mais je ne peux accepter que l'un d'entre eux, alors j'ai accepté l'autre parce qu'il expliquait le "pourquoi" aussi bien que le "comment". –

+0

@Joshua Carmody - Je ne pouvais pas être plus d'accord. il le méritait! – David

Questions connexes