2012-02-21 97 views
0

我有以下查询:

use [$(DB)] 
select * from users 

,但我不能传递参数低谷的SqlCommand。它只能从命令行工具中使用。它说$ DB数据库不存在,所以参数不传递。

  SqlCommand cmd = new SqlCommand(query, connection); 
      cmd.Parameters.AddWithValue("DB", "theDatabase"); 
      cmd.ExecuteNonQuery(); 

任何想法?

+3

为什么不能在连接字符串中指定DB? – 2012-02-21 15:55:04

+0

你正在使用什么RDMS .. ?? – MethodMan 2012-02-21 15:55:50

+0

这些是成百上千的迁移脚本。 MSSQLSERVER 2005和2008 – mynkow 2012-02-21 15:59:45

回答

0

我能想到这样做的唯一途径是TI使用exec来是这样的:

exec ('use ['+ @db + ']; SELECT * FROM someTable'); 

我不知道这是否会帮助你,但...

0

正如在建议评论同上,只是指定数据库连接字符串中:

var connectionString = @"…;Initial Catalog=theDatabase;…"; 
//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

using (var connection = new SqlConnection(connectionString)) 
using (var command = connection.CreateCommand()) 
{ 
    command.CommandText = "SELECT * FROM users"; 
    … 
} 

如果你使用同一实例不同的数据库时,您可以使用一个ConnectionStringBuilder放在一起各种C语言连接字符串仅在数据库名称中有所不同。 (注意你可能想要比SELECT *更具体);

+0

10x。问题是我有很多脚本无法轻易修改。 – mynkow 2012-02-21 18:36:08