2011-09-15 22 views
3

問題を遭遇しましたが、それを完了するための素晴らしい、安全な方法は考えられません。私は "Sql.Helper"クラス(Microsoft.ApplicationBlocks.Data)の周りにラッパークラスを持っており、どこでもパラメータを使用しています。私はC#TSQL + C#:使用中のデータベースを動的に変更する

USE @DBName 

そのコードのために使用中の現在のDBを変更しようとしています

はparametarisedすることができないので、どこでも私が読んで実行していることを示唆しそう

などの動的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.s. this._currentDBはエスケープされたSQLです(可能な限り)

+1

の新しいインスタンスを作成する前に、あなただけのCommandText内のテーブル参照でデータベース名を含めることはできませんなぜ

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

今すぐ新しいもののためにDB名を置き換え? SELECT * FROM Database..Table – adrianm

答えて

1

接続文字列には、接続先のデータベースが含まれています。私は接続文字列のデータベースを変更するだけで、正しいデータベースに接続します。

0

正確にどのようにダイナミックにする必要がありますか?

不明な名前のデータベースが不明な場合を除き、それぞれにConnectionStringを作成して、Enum、スイッチケース、If-Elseなどに基づいて正しいものを選択するだけではいかがですか。

1

はい、DBを変更する適切な方法は、接続文字列を変更することです。

App.configから接続文字列を取得し、プログラムによってデータベース名を置き換えることができます。あなたがのDBConnection