【发布时间】:2021-08-12 20:00:01
【问题描述】:
DESKTOP-123\\markj 的数据库中有一条匹配记录。当我在 SQL Server Management Studio 中执行代码时,它会返回一条记录。
DECLARE @User NVARCHAR(260) = 'DESKTOP-123\\markj'
SELECT r.RoleName
FROM dbo.WindowsAuthenticationRole war
JOIN dbo.[Role] r ON r.RoleId = war.RoleId
WHERE war.[User] = @User
但是这个 C# 代码返回 0 条记录
SqlCommand command = new SqlCommand("SELECT r.RoleName FROM dbo.WindowsAuthenticationRole war JOIN dbo.[Role] r ON r.RoleId = war.RoleId WHERE war.[User] = @User", connection);
command.Parameters.Add("@User", SqlDbType.NVarChar).Value = @"DESKTOP-123\\markj";
如何让 C# 中的 SQL 命令正常工作?
更新
回复帮助我解决了问题,实际上我在数据库中保存了带有两个斜杠的值。
【问题讨论】:
-
There is a matching record in the DB for "DESKTOP-123\markj".← 您正在使用@符号,因此您应该只使用一个反斜杠,因为它不再被转义。@"DESKTOP-123\markj"; -
同样,在 Sql Server 中,您根本不会在字符串(varchar/nvarchar 或 char nchar)中转义反斜杠。
DECLARE @User NVARCHAR(260) = 'DESKTOP-123\markj'
标签: c# sql sql-server sqlcommand