嘿,我正在使用参数化查询,我的应用程序运行得很好但现在(我不知道为什么)它们不再被替换为值...
因此,它不会像"SELECT [TABLE_NAME] FROM [MyDefinetelyExistingDatabase]";
那样运行,而是会尝试执行"SELECT [TABLE_NAME] FROM [@targetDatabase]";
,当然,它会失败。
var dataBaseToGetTablesFrom = "MyDefinetelyExistingDatabase";
var results = new List<string>();
const string query = @"SELECT
[TABLE_NAME] AS tableName
FROM
[@targetDatabase].[INFORMATION_SCHEMA].[TABLES] ;";
using (var context = new ConnectionHandler(true))
{
if (context.Connection.State != ConnectionState.Open)
throw new ConnectionFailedException(context.Connection.State);
using (var command = new SqlCommand(query, context.Connection))
{
command.Parameters.AddWithValue("@targetDatabase", dataBaseToGetTablesFrom);
using (var reader = command.ExecuteReader())
{
if (!reader.HasRows)
return results.ToArray();
while (reader.Read())
results.Add(reader.GetString(0));
}
}
}
return results.ToArray();
我现在尝试了不同的格式和事情来添加参数,但结果相同......
我不希望通过string.Format
直接将值插入查询中来实现这一点,例如但我想要这些参数(在代码中的不同位置正常工作(???)但不在哪里我想要。
实际上,我需要在每个语句中使用参数,并且必须能够通过调用[DB]来调用不同的数据库。[Table-Schema]。[Table]
[编辑]
嘿伙计们,几天前发现了这个问题并且认为我和你分享了。 据我所知,我的问题总体上是尝试替换databasename和/或其他一些示例,也就是表名。 因此,这对我来说非常有意义,因为服务器无法准备执行语句,如果它甚至不知道它应该在哪个表上工作,因此也不知道关于结构等的任何事情:D因此,我改变了我的陈述,以适应我的新知识,并且它像一个魅力一样被激发。
答案 0 :(得分:0)
你需要动态的sql来实现这样的......
DECLARE @Sql NVARCHAR(MAX);
SET @Sql = N' SELECT [TABLE_NAME] AS tableName '
+ N' FROM ' + QUOTENAME(@targetDatabase) + N'.[INFORMATION_SCHEMA].[TABLES]'
Exec sp_executesql @Sql