【问题标题】:Why are my parameterized queries not working in ASP.NET?为什么我的参数化查询在 ASP.NET 中不起作用?
【发布时间】:2011-02-10 22:05:42
【问题描述】:

我在扩展 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。

【问题讨论】:

  • 有人花了太多时间使用 Interbase ;)

标签: .net asp.net sql-server-2005


【解决方案1】:

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

【讨论】:

  • 是的。就是这样!不敢相信我想不通。我想我以前一般都用过 ODBC 代码,没有意识到我这次做的不一样。
  • +1 提供了为什么这不同的额外解释。向你致敬。
【解决方案2】:

改变

WHERE Username = ?

WHERE Username = @Username

【讨论】:

  • 谢谢。这里的两个答案都是正确的,非常有帮助,并且或多或少同时发布。但是我只能接受其中一个,所以我接受了另一个,因为它解释了“为什么”以及“如何”。
  • @Joshua Carmody - 我完全同意。他活该!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多