c#多行字符串允许变量调用

vys*_*akh 4 c#

我用谷歌搜索但无法找到这个问题的答案:

我知道c#中的多行字符串.但是我怎样才能创建一个字符串:

string temp = @"DECLARE @rolename varchar(max)
SET @rolename ='***' 
EXEC sp_addrolemember N'db_execute',@rolename"
Run Code Online (Sandbox Code Playgroud)

*表示我必须delcare一个具有某些值的变量,如(object.variable).

这可能吗??

Mar*_*ell 10

当然,.NET支持多行字符串.该@"..."语法只是一个快捷方式,使其在语言更容易.但是,在您的具体示例中,您不应尝试连接值:整个示例应通过参数完成:

cmd.CommandText = "EXEC sp_addrolemember N'db_execute',@rolename";
cmd.Parameters.AddWithValue("rolename", yourRoleName);
Run Code Online (Sandbox Code Playgroud)

更新:检查msdn,第二个参数实际上是成员名称,但您也可以使用:

cmd.CommandText = "sp_addrolemember";
cmd.CommantType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("rolename", "db_execute");
cmd.Parameters.AddWithValue("membername", yourMemberName);
Run Code Online (Sandbox Code Playgroud)


Tim*_*ter 5

你可以使用string.Format:

string temp = @"DECLARE @rolename varchar(max)
SET @rolename ='{0}' 
EXEC sp_addrolemember N'db_execute',@rolename";

string result = string.Format(temp, object.variable);
Run Code Online (Sandbox Code Playgroud)

请注意,如果object.variable是(或将来可能是用户定义的变量),您将对sql注入攻击开放.

  • 这是SQL注入风险,请注意 - 取决于角色名称是否为白名单 (4认同)