我在扩展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。
答案 0 :(得分:5)
更改
WHERE Username = ?
到
WHERE Username = @Username
答案 1 :(得分:5)
'?'据我所知,语法是ODBC语法。在这里,你正在使用 直接连接到Sql。请改用“@Username”。