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

C# TSQL+C:动态更改正在使用的数据库,c#,sql,tsql,sql-injection,C#,Sql,Tsql,Sql Injection,我偶然发现了一个问题,我想不出一个好的、安全的方法来完成它。我有一个围绕Sql.Helper类Microsoft.ApplicationBlocks.Data的包装器类,我在任何地方都使用参数 我正在尝试更改当前用于C的DB USE @DBName 这段代码不能参数化,因此我读到的所有地方都建议运行动态SQL DECLARE @SQL_SCRIPT NVARCHAR(100); SET @SQL_SCRIPT = REPLACE('USE {DBName};', '{DBName}', @D

我偶然发现了一个问题,我想不出一个好的、安全的方法来完成它。我有一个围绕Sql.Helper类Microsoft.ApplicationBlocks.Data的包装器类,我在任何地方都使用参数

我正在尝试更改当前用于C的DB

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;
有人知道为该解决方案选择DB的正确方法吗


p、 这是我能做的最好的SQL转义

您的连接字符串包含您连接到的数据库。我只需在连接字符串中更改数据库,您就可以连接到正确的数据库。

您可以在与的连接中更改数据库


编辑:您必须使用。

它到底需要多大的动态性


除非有数量未知且名称未知的数据库,否则为什么不为每个数据库创建一个ConnectionString,然后根据枚举、开关大小写(如果有)或类似内容选择正确的数据库。

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

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

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

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

为什么不能在commandText内的表引用中包含数据库名称?从数据库中选择*table谢谢你的帮助,我一定浏览了这个选项:P