无法从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部分发生了什么,也不知道为什么会引发异常。我试着用@,但也没用。如果您能为我提供任何帮助,我将不胜感激。
使用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);