簡體   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