Не удается прочитать строку, содержащую обратную косую черту из таблицы SQL - PullRequest
3 голосов
/ 10 января 2012

Я пытаюсь прочитать строку с обратной косой чертой в ней из таблицы SQL.По какой-то причине я не могу передать обратную косую черту в строке.Моя строка - это имя пользователя в следующем формате: домен \ имя пользователя. Я отправляю его в таблицу следующим образом:

    SqlCommand scomm = new SqlCommand();
    SqlDataReader sr;
    string nameOfUser = "Domain\userName";
        scomm.CommandText = "SELECT * FROM tableOfUsers WHERE UserName=" + nameOfUser;
sr = scomm.ExecuteReader();

Во время отладки я вижу, что еще один обратный слеш добавляется в качестве escape-символа, однако яне знаю, что происходит с частью SQL и почему выдается исключение.Я пытался использовать @, но это тоже не помогло.Буду признателен за любую помощь, которую вы можете оказать мне.

Ответы [ 3 ]

10 голосов
/ 10 января 2012

Использование SqlParameter.

string nameOfUser = @"Domain\userName";
scomm.CommandText = "SELECT * FROM tableOfUsers WHERE UserName=@username";
scomm.Parameters.Add("@username",SqlDbType.VarChar,30).Value=nameOfUser;
//open the connection
SqlDataReader sr=scomm.ExecuteReader();
if(sr.Read())  // use while loop when one or more exists
 {
    Console.WriteLine(sr["columnName"] + " or use column ordinal : " + sr[0]);
 }
4 голосов
/ 10 января 2012

Вы можете использовать строковый литерал

string nameOfUser = @"Domain\userName";

или экранировать обратную косую черту

string nameOfUser = "Domain\\userName";

В вашем запросе также есть некоторые ошибки.Теоретически вам нужно поместить кавычки вокруг nameOfUser

string nameOfUser = @"Domain\userName";
scomm.CommandText = "SELECT * FROM tableOfUsers WHERE UserName= '" + nameOfUser + "'";

Но вы должны действительно использовать параметризованный запрос

string nameOfUser = @"Domain\userName";
scomm.CommandText = "SELECT * FROM tableOfUsers WHERE UserName= @name";
scomm.Parameters.AddWithValue("@name", nameOfUser);

Это защитит вас от Sql InjectionАтаки , и, что более привычно, позволят вашему запросу работать с людьми, чьи имена имеют ' - как "O'Reilly"

2 голосов
/ 10 января 2012

Использовать SqlParameter. Документация параметров Sql .поскольку класс SqlPrameter предоставит функциональность, позволяющую избежать инъекций Sql и других проблем, которые запрещены БД.

string UserName = @"Domain\userName";
scomm.CommandText = "SELECT * FROM tableOfUsers WHERE UserName=@username";
scomm.Parameters.AddWithValue("@username",UserName);
...