2009-10-23 9 views
5

SQL Server(Standard Edition)がインストールされている場合は、コードでサーバー名を取得する方法。SQL Server(Standard Edition)がインストールされている場合、コードでサーバー名を取得する方法

SQL Serverに接続するための接続文字列を作成する際にサーバー名を渡します。この値をコードで取り出すことはできますか?

string sqlConnectionString = string.Format(
"user id={0};password={1};server={2};Trusted_Connection=no;database=TestDB; 
connection timeout={3}", 
dirDBinfo.UserName, dirDBinfo.Password, "ServerName", dirDBinfo.TimeOut); 

答えて

8

私はあなたが望むものを理解していません。

すでに接続文字列を持っている、とあなたが他の場所での使用のためにそれから、サーバー名を抽出しようとしている場合は、そのようにそれをリバースエンジニアリングすることができます

var parser = new SqlConnectionStringBuilder(connectionString); 
var serverName = parser.DataSource; 

を、あなたの接続文字列を構築している場合その後、最初の時間のために:

  1. あなたがあなたのクライアントコードが上で実行されているマシン上のSQL Serverに接続することがわかっている場合は、単にサーバー名に(local)を使用しています。 SQL Serverにインスタンス名がある場合は、(local)\myinstancenameのように指定します。
  2. 接続するサーバーを事前に知っていない場合は、別の場所からその情報を取得するのはあなた次第です。
+1

私は同意します - Ashishがアプリケーションがどのサーバーを使用するかを推測しようとしているようですが、それは単にできません。 '(local) 'を介してデフォルトのローカルインスタンスを選択する以外に、唯一の賢明なオプションは、サーバが使うコードを伝えることです。あなたはどのようにそれをするのかはあなた次第です。 –

0

サーバーはローカルコンピュータにありますか?
その場合は、サーバー名をlocalhostに設定します。
そうでない場合、use SqlDataSourceEnumerator


また、代わりにString.Formatを使用して接続文字列を構築するのには、SqlConnectionStringBuilderを使用する必要があります。これによりセミコロンで値が処理されます。例えば

var builder = new SqlConnectionStringBuilder(); 

builder.UserID = dirDBinfo.UserName; 
builder.Password = dirDBinfo.Password; 
builder.Server= "localhost"; 
builder.UserID = dirDBinfo.UserName; 
builder["Trusted_Connection"] = "no"; 
builder.Database = "TestDB" 
builder.ConnectTimeout = dirDBinfo.TimeOut; 
+1

localhostは名前付きインスタンスでない場合にのみ動作します –

0

ちょうどこの接続に対してSELECT @@ SERVERNAMEを実行することができませんか?

+0

;彼は接続文字列を作成しようとしています。 – SLaks

+1

まだ接続文字列を作成していますか?この場合、選択するSQLサーバーを決定するロジックは何ですか?ローカルの場合は、あなたが言ったように - ちょうどlocalhostを使用してください。しかし、私はすでにサーバー名が渡されていると思っていましたが、コードで何とかそれを取得する必要があります... – DmitryK

+0

私は質問を理解するので、それは彼が求めているものです。 – SLaks

関連する問題