2013-08-21 19 views
4

我用Google搜索,但无法找到这个问题的答案:C#多行字符串变量允许调用

我知道在C#中多行字符串。但我怎么能创建这样一个字符串:

string temp = @"DECLARE @rolename varchar(max) 
SET @rolename ='***' 
EXEC sp_addrolemember N'db_execute',@rolename" 

*代表那里我有delcare具有象(object.variable)一些值的变量。

这可能吗?

+1

嗯,你可能想要使用SqlPa做如果可能的话,rameter。将文本注入SQL查询可能是一个坏习惯。 –

回答

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

请注意,您是开放的SQL注入攻击,如果object.variable是(或者可能会在未来的)用户定义变量。

+4

这是SQL注入风险,请注意 - 取决于角色名称是否为白名单 –

+0

但是此object.variable值会落在那个确切位置({0})? – vysakh

+0

白名单的意义? – vysakh

3

使用string.Format方法:

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

这是SQL注入风险,请注意 - 取决于角色名称是否为白名单 –

10

当然,.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); 
1

是其可能的:

string temp = string.Format(@"DECLARE @rolename varchar(max) 
SET @rolename ='{0}' 
EXEC sp_addrolemember N'db_execute',@rolename", variable); 
相关问题