如何将$(DB)参数传递给SqlCommand?

时间:2012-02-21 15:51:33

标签: c# sql-server

我有以下查询:

use [$(DB)]
select * from users

但我无法通过SqlCommand传递参数。它仅适用于命令行工具。它说$ DB数据库不存在,因此不传递参数。

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

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

SQLCMD有自己的命令,它与SQL / T-SQL语句分开解析。 SQL Server或其他脚本工具(如SSMS)无法理解这些命令

http://sqlblog.com/blogs/michael_coles/archive/2010/01/10/parent-child-build-scripts-with-sqlcmd.aspx

答案 1 :(得分:0)

我能想到的唯一方法是使用exec这样:

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

我不确定这对你有帮助,但是......

答案 2 :(得分:0)

正如上面的评论中所建议的那样,只需在连接字符串中指定数据库:

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

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

如果您正在使用同一实例上的不同数据库,则可以使用ConnectionStringBuilder将各种连接字符串放在一起,这些连接字符串仅在数据库名称中有所不同。 (请注意,您可能希望比SELECT * ...)

更具体