[英]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.