我用Google搜索,但无法找到这个问题的答案:C#多行字符串变量允许调用
我知道在C#中多行字符串。但我怎么能创建这样一个字符串:
string temp = @"DECLARE @rolename varchar(max)
SET @rolename ='***'
EXEC sp_addrolemember N'db_execute',@rolename"
*代表那里我有delcare具有象(object.variable)一些值的变量。
这可能吗?
我用Google搜索,但无法找到这个问题的答案:C#多行字符串变量允许调用
我知道在C#中多行字符串。但我怎么能创建这样一个字符串:
string temp = @"DECLARE @rolename varchar(max)
SET @rolename ='***'
EXEC sp_addrolemember N'db_execute',@rolename"
*代表那里我有delcare具有象(object.variable)一些值的变量。
这可能吗?
你可以使用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);
请注意,您是开放的SQL注入攻击,如果object.variable
是(或者可能会在未来的)用户定义变量。
使用string.Format方法:
string temp = string.Format(@"DECLARE @rolename varchar(max)
SET @rolename ='{0}'
EXEC sp_addrolemember N'db_execute',@rolename", variable);
这是SQL注入风险,请注意 - 取决于角色名称是否为白名单 –
当然,.NET支持多行字符串。 @"..."
语法只是简化语言的捷径。然而,在你的具体的例子,你不应尝试以连接值:即整个例如应通过参数来完成:
cmd.CommandText = "EXEC sp_addrolemember N'db_execute',@rolename";
cmd.Parameters.AddWithValue("rolename", yourRoleName);
更新:检查msdn,第二个参数实际上是成员的名字,但您可能还可以使用:
cmd.CommandText = "sp_addrolemember";
cmd.CommantType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("rolename", "db_execute");
cmd.Parameters.AddWithValue("membername", yourMemberName);
是其可能的:
string temp = string.Format(@"DECLARE @rolename varchar(max)
SET @rolename ='{0}'
EXEC sp_addrolemember N'db_execute',@rolename", variable);
嗯,你可能想要使用SqlPa做如果可能的话,rameter。将文本注入SQL查询可能是一个坏习惯。 –