【问题标题】:SqlCommand with where clause backslashes [closed]带有 where 子句反斜杠的 SqlCommand [关闭]
【发布时间】: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


【解决方案1】:

使用@而不转义反斜杠..或不使用@转义它

command.Parameters.Add("@User", SqlDbType.NVarChar).Value = @"DESKTOP-123\markj";

//or
command.Parameters.Add("@User", SqlDbType.NVarChar).Value = "DESKTOP-123\\markj";

Documentation 关于字符串插值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-19
    • 2012-11-16
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 2015-08-11
    • 2012-10-18
    • 2013-03-03
    相关资源
    最近更新 更多