Почему мои параметризованные запросы не работают в ASP.NET? - PullRequest
3 голосов
/ 11 февраля 2011

У меня есть код, который выглядит следующим образом в классе, который расширяет 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 ]

5 голосов
/ 11 февраля 2011

'?' Синтаксис, насколько я знаю, это синтаксис ODBC. Здесь вы используете прямая связь с Sql. Вместо этого используйте «@Username».

5 голосов
/ 11 февраля 2011

Изменение

WHERE Username = ?

до

WHERE Username = @Username
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...