【发布时间】:2015-11-17 23:59:52
【问题描述】:
嘿,我正在为我的应用程序使用参数化查询,它工作得很好,但现在(我不知道为什么)它们不再被值替换...
因此,它不会运行"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]
[编辑]
嘿,伙计们,几天前就发现了这个问题,并想与你们分享。 据我所知,我的整体问题是尝试替换数据库名和/或在其他一些示例中,表名也是如此。 所以这行不通,这对我来说很有意义,因为如果服务器甚至不知道它应该在哪个表上工作并且因此对结构等一无所知,它就无法准备执行语句。
所以我改变了我的陈述以适应我的新知识,它就像一个魅力一样发挥了预期的作用。
【问题讨论】:
-
@lad2025 你不能在
USE语句中使用variable也GO不是t-sql,它只能在SSMS中作为batch separator使用。 -
不是您问题的答案,但您应该阅读此内容。 blogs.msmvps.com/jcoehoorn/blog/2014/05/12/…
-
@M.Ali 是的,所以我们一如既往地回到动态 SQL :)
标签: c# mysql sql-server parameters