我有以下查询:
use [$(DB)]
select * from users
但我无法通过SqlCommand传递参数。它仅适用于命令行工具。它说$ DB数据库不存在,因此不传递参数。
SqlCommand cmd = new SqlCommand(query, connection);
cmd.Parameters.AddWithValue("DB", "theDatabase");
cmd.ExecuteNonQuery();
有什么想法吗?
答案 0 :(得分:2)
SQLCMD有自己的命令,它与SQL / T-SQL语句分开解析。 SQL Server或其他脚本工具(如SSMS)无法理解这些命令
答案 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 *
...)