繁体   English   中英

TSQL + C#:动态更改正在使用的数据库

[英]TSQL + C#: Dynamically changing the Database in use

我偶然发现了一个问题,我无法想到一个完美的安全方法。 我有一个围绕“Sql.Helper”类(Microsoft.ApplicationBlocks.Data)的包装类,我在各处使用参数。

我正在尝试更改用于C#的当前数据库

USE @DBName

该代码不能被参数化,因此我读到的任何地方都建议将其作为动态SQL(不寒而栗)运行

DECLARE @SQL_SCRIPT NVARCHAR(100); 
SET @SQL_SCRIPT = REPLACE('USE {DBName};', '{DBName}', @DBName); 
exec sp_executesql @SQL_SCRIPT;

但是,在此“sp_executesql”之外,DB保持不变。 然后我考虑将其附加到所有SQL调用的前面,但这无济于事。

运行时,分析器告诉我代码最终运行为:

exec sp_executesql N'DECLARE @SQL_SCRIPT NVARCHAR(100); SET @SQL_SCRIPT = REPLACE(''USE {DBName};'', ''{DBName}'', @DBName); exec sp_executesql @SQL_SCRIPT;',N'@DBName nvarchar(100)',@DBName=N'MyDatabaseName'

它默认包含在另一个“exec sp_executesql”中:(

目前,我知道这不是最好的方法,但是我在每次调用开始时都会执行以下操作。

commandText = "USE " + this._currentDB + ";" + commandText;

有谁知道为此解决方案选择数据库的正确方法?

ps this._currentDB被SQL转义(尽我所能)

您可以使用 SqlConnection.Database属性 更改连接中的数据库。

编辑:您必须使用SqlConnection.ChangeDatabase方法

您的连接字符串包含您连接到的数据库。 我只是更改连接字符串中的数据库,您将连接到正确的数据库。

是的,更改数据库的正确方法是更改​​连接字符串。

您可以从App.config获取连接字符串并以编程方式替换数据库名称。

string connString = ConfigurationManager.ConnectionStrings["YourKey"].ConnectionString;

现在,在创建新的DBConnection实例之前,请替换新名称的DB名称

究竟它需要多么动态?

除非您拥有未知数量的具有未知名称的数据库,否则为什么不为每个数据库创建一个ConnectionString,然后根据Enum,switch case,If-Else或类似选择正确的ConnectionString。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM