为什么我的参数化查询在ASP.NET中不起作用?

Jos*_*ody 3 .net asp.net sql-server-2005

我在扩展MembershipProvider的类中有类似下面的代码(下面的代码已被匿名化并略微简化):

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.
Run Code Online (Sandbox Code Playgroud)

代码在到达cmd.ExecuteReader()时中断; 抛出的异常是"System.Data.SqlClient.SqlException:'''附近的语法不正确."

它似乎表现得好像"?" 在命令文本中未正确解释为参数.我无法弄清楚我做错了什么.我承认我的ASP.NET是有点生疏,但我这样写几十次之前的代码,我写了上面的一切看起来像它的使用模式,我看到的教程,并在MSDN的例子相匹配.谁能告诉我我做错了什么?

目标.NET版本是4.0.ASP.NET正在Visual Web Developer Express 2010中的调试环境中的本地计算机上运行.数据库是SQL Server 2005.

Dav*_*vid 5

更改

WHERE Username = ?
Run Code Online (Sandbox Code Playgroud)

WHERE Username = @Username
Run Code Online (Sandbox Code Playgroud)


Rob*_*sen 5

'?' 据我所知,语法是ODBC语法.在这里,您正在使用与Sql的直接连接.请改用"@Username".