Синтаксическая ошибка рядом с источником при попытке доступа к базе данных C # asp.net - PullRequest
2 голосов
/ 17 ноября 2011
string databaseLocation = "|DataDirectory|\\Users.mdf";
string connectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=" + databaseLocation + ";Integrated Security=True;User Instance=True";    
SqlConnection sqlConnection = new SqlConnection(connectionString);
SqlCommand command = new SqlCommand();
command.CommandText = String.Format("SELECT * FROM Users WHERE Username = {0}", username);
command.CommandType = CommandType.Text;
command.Connection = sqlConnection;
sqlConnection.Open();
int numberOfRows = command.ExecuteNonQuery();
sqlConnection.Close();
return numberOfRows;

Это должно проверить базу данных Users.mdf на количество совпадений имени пользователя.но я получаю «ошибка синтаксиса около источника» ошибка времени выполнения, когда он попадает в ExecuteNonQuery.Я не могу найти ничего плохого ... Пожалуйста, помогите:)

Ответы [ 2 ]

4 голосов
/ 17 ноября 2011

Ваш отформатированный SQL-оператор не включает разделители для имени пользователя:

command.CommandText = String.Format("SELECT * FROM Users WHERE Username = {0}", username);

устанавливает текст команды примерно так:

SELECT * FROM Users WHERE Username = foo

Это легко исправить, но было бы лучше использовать SqlParameter:

command.CommandText = "SELECT * FROM Users WHERE Username = @username");
command.Parameters.AddWithValue("@username", username);

Кроме того, ExecuteNonQuery вернет -1 для числа затронутых строк, поскольку select не влияет на строки. Вместо этого сделайте:

command.CommandText = "SELECT COUNT(*) FROM Users WHERE Username = @username");
command.Parameters.AddWithValue("@username", username);
...
int numberOfRows = (int)command.ExecuteScalar();
0 голосов
/ 17 ноября 2011

Ваш код должен быть:

string databaseLocation = "|DataDirectory|\\Users.mdf";
string connectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=" + databaseLocation + ";Integrated Security=True;User Instance=True";    
SqlConnection sqlConnection = new SqlConnection(connectionString);
SqlCommand command = new SqlCommand();
command.CommandText = "SELECT COUNT(*) FROM Users WHERE Username = @User";
command.CommandType = CommandType.Text;
command.Parameters.AddWithValue("@User",username);
command.Connection = sqlConnection;
sqlConnection.Open();
int numberOfRows = command.ExecuteScalar();
sqlConnection.Close();
return numberOfRows;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...