无法从sql表中读取包含反斜杠的字符串

本文关键字:包含反 字符串 读取 sql | 更新日期: 2023-09-27 18:20:02

我正试图从sql表中读取一个包含反斜杠的字符串。由于某些原因,我无法在字符串中传递反斜杠。我的字符串是用户名,格式如下:域''用户名我把它按如下方式送到桌子上:

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

在调试过程中,我可以看到添加了另一个反斜杠作为转义符,但我不知道sql部分发生了什么,也不知道为什么会引发异常。我试着用@,但也没用。如果您能为我提供任何帮助,我将不胜感激。

无法从sql表中读取包含反斜杠的字符串

使用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]);
 }

您可以使用字符串文字

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注入攻击,而且更常见的是,将允许您的查询与名称具有'的人一起工作,如"O’Reilly"

使用SqlParameter.Sql参数文档。因为SqlPrameter类将提供避免Sql注入和其他问题的功能,而数据库是不允许的。

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