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

C# 无法从sql表中读取包含反斜杠的字符串,c#,sql,backslash,C#,Sql,Backslash,我试图从sql表中读取包含反斜杠的字符串。由于某种原因,我无法在字符串中传递反斜杠。 My string是用户名及其格式:域\用户名 我将其发送到桌子上,如下所示: SqlCommand scomm = new SqlCommand(); SqlDataReader sr; string nameOfUser = "Domain\userName"; scomm.CommandText = "SELECT * FROM tableOfUsers WHERE

我试图从sql表中读取包含反斜杠的字符串。由于某种原因,我无法在字符串中传递反斜杠。 My string是用户名及其格式:域\用户名 我将其发送到桌子上,如下所示:

    SqlCommand scomm = new SqlCommand();
    SqlDataReader sr;
    string nameOfUser = "Domain\userName";
        scomm.CommandText = "SELECT * FROM tableOfUsers WHERE UserName=" + nameOfUser;
sr = scomm.ExecuteReader();
在调试期间,我可以看到另一个反斜杠被添加为转义字符,但是我不知道sql部分会发生什么,也不知道为什么会抛出异常。我试着用@,但也没用。
如果你能为我提供任何帮助,我将不胜感激

您可以使用字符串文本

string nameOfUser = @"Domain\userName";
或者避开你的反斜杠

string nameOfUser = "Domain\\userName";

您的查询中也有一些错误。理论上,您需要在用户名称周围加引号

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);

这将保护您的查询不受影响,更普通的是,它将允许您的查询与姓名中有
-如“O'Reilly”

使用
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]);
 }
使用SqlParameter。。因为SqlPrameter类将提供避免Sql注入和其他问题的功能,这是db不允许的

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

当你说“抛出异常”或“我得到一个错误”时,你的手指下一步应该开始键入的就是你得到的确切错误或异常消息。我们从这里看不到你的屏幕,也看不懂你的心思。这是我得到的错误:“靠近“\”的语法不正确。”+1-我以前从未见过这种语法。
。Add(…).Value=nameOfUser
-CoolThank AVD,我尝试过这个,现在我得到了这个异常:“在没有数据时读取的尝试无效。”表中有数据。我还检查了连接状态,并且在执行读取之前连接状态是打开的。@user1094315-您必须调用DataReader.read()方法-此方法获取一行,如果它有数据,则返回true。感谢Adam,与我上面提到的一样,我尝试了此操作,现在我得到了以下异常:“在没有数据时读取的尝试无效。”表中有数据。我还检查了连接状态,并且在执行读取之前连接状态是打开的。@user1094315-不确定。如何执行和读取ado.net对象存在一些问题。我会用你的更新代码发布一个新问题。我发现了这个问题。问题是我试图阅读的表格。换到另一张桌子后,阅读没有任何问题。我想有一些损坏的数据。谢谢你的帮助。