C#使用现在无法工作的sql参数

时间:2015-08-24 14:07:57

标签: c# mysql sql-server parameters

嘿,我正在使用参数化查询,我的应用程序运行得很好但现在(我不知道为什么)它们不再被替换为值...

因此,它不会像"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

因此,我改变了我的陈述,以适应我的新知识,并且它像一个魅力一样被激发。

1 个答案:

答案 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