我有2个表具有完全相同的列。但它们存储在Database1和Database2中(在同一服务器上)。我能否将数据库名称作为变量传递?例如:
SELECT [SomeValue]
FROM [Database2].[dbo].[Klienci]
SELECT [SomeValue]
FROM [Database1].[dbo].[Klienci]
有没有办法将整个[FROM]作为@variable传递给C#中的以下代码:
SqlCommand sqlQuery = new SqlCommand(preparedCommand, varConnection);
sqlQuery.Prepare();
sqlQuery.Parameters.AddWithValue("@varDatabase", varDatabase);
@varDatabase将保存数据库名称和/或表名,即。 [Database1]。[dbo]。[Klienci]采用一种或另一种格式。
我在谈论C#3.5 / MSSQL 2005/2008。
答案 0 :(得分:7)
为什么不在进行连接时设置数据库?然后代码甚至没有改变。
答案 1 :(得分:2)
根据请求的类型,您需要动态设置数据库名称和连接字符串。即使你有(例如)60个数据库,你可能会连接到,使用硬编码语句是没有人会推荐的,因为
配置文件与其他许多文件一起服务于此目的,并想一想你的同事,看看这个“ CustomConnectionStringsFile ”并摸不着头脑。
最好的方法是将它们保存为配置文件中的connectionStrings并使用它 你需要
像这样的东西
将连接字符串添加到Web.Config
<connectionStrings>
<add
name="NorthwindConnectionString"
connectionString="Data Source=serverName;Initial
Catalog=Northwind;Persist Security Info=True;User
ID=userName;Password=password"
providerName="System.Data.SqlClient"
/>
<add
name="BestDBConnectionString"
connectionString="Data Source=serverName;Initial
Catalog= BestDB;Persist Security Info=True;User
ID=userName;Password=password"
providerName="System.Data.SqlClient"
/>
</connectionStrings>
访问Connectionstring
string myConnString ="";
if(ThisIsThat("A"))
{
myConnString =
rootWebConfig.ConnectionStrings.ConnectionStrings["NorthwindConnectionString"];
}
else if(ThisIsThat("B"))
{
myConnString =
rootWebConfig.ConnectionStrings.ConnectionStrings["BestDBConnectionString"]
}
{ else // Can go on}
有关
的更多信息希望有所帮助
答案 2 :(得分:1)
多个Connections字符串是你的朋友!
答案 3 :(得分:1)
不,T-SQL参数不能引用实体(例如数据库或表),如果没有其他原因,那么它会让优化者无法理解。
如果只是DB名称不同,动态构建连接字符串的建议是一个很好的建议。您可以使用SqlConnectionStringBuilder类来减少错误。
你也可以动态地建立一个C#字符串,但是要小心自己打开Sql注入攻击。
否则,只需在T-SQL代码中执行IF语句:
IF (@dbName = 'Database1') BEGIN
SELECT SomeValue FROM [Database1].[dbo].[Klienci]
END ELSE BEGIN
SELECT SomeValue FROM [Database2].[dbo].[Klienci]
END
答案 4 :(得分:0)
您可以但我只是将连接更改为指向您要查询的数据库。
<强>澄清:强>
为了澄清,您可以使用动态sql执行此操作。例如将数据库名称传递给sproc,然后可以构建完整的语句并执行它。当然,直接使用变量是无效的(“SELECT * FROM [@DatabaseName] .dbo.TableName”无效)。但是,这不是推荐的方法,因此最好是改变连接。
答案 5 :(得分:0)
尝试使用类似DBProviderFactory的内容