gpt4 book ai didi

c# - TSQL + C# : Dynamically changing the Database in use

转载 作者:行者123 更新时间:2023-11-30 15:06:41 25 4
gpt4 key购买 nike

我偶然发现了一个问题,但我想不出一个好的、安全的方法来完成它。我有一个围绕“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”之外,数据库保持不变。然后我考虑将其附加到所有 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;

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

附注this._currentDB 是 SQL 转义的(尽我所能)

最佳答案

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

编辑:您必须使用 SqlConnection.ChangeDatabase method .

关于c# - TSQL + C# : Dynamically changing the Database in use,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7433254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com