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

时间:2011-02-10 22:05:42

标签: .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.

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

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

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

2 个答案:

答案 0 :(得分:5)

更改

WHERE Username = ?

WHERE Username = @Username

答案 1 :(得分:5)

'?'据我所知,语法是ODBC语法。在这里,你正在使用 直接连接到Sql。请改用“@Username”。