web-dev-qa-db-ja.com

C#はデータベースに接続し、データベースをリストします

可能性のある複製:
現在のすべてのデータベース名を検索するSQL Serverクエリ

最初にデータベースを指定せずにサーバーに接続した後、データベースをリストする方法を見つけようとしています。

sqlConnection1 = new SqlConnection("Server=" + sqlServer + ";Database=" + database +    
";User ID=" + userName + ";Password=" + password + ";Trusted_Connection=False;");

だから基本的に私が望むのは、エンドユーザーがSQLサーバーに接続し、ドロップダウンリストに接続してクエリできるデータベースのリストを入力することです。

アイデア?

22
user1158745

SqlConnection.GetSchema

using(var con = new SqlConnection("Data Source=Yourserver; Integrated Security=True;"))
{
    con.Open();
    DataTable databases = con.GetSchema("Databases");
    foreach (DataRow database in databases.Rows)
    {
        String databaseName = database.Field<String>("database_name");
        short dbID = database.Field<short>("dbid");
        DateTime creationDate = database.Field<DateTime>("create_date");
    }
} 

SQL Serverスキーマコレクション(ADO.NET)

サポートされているスキーマコレクションのリストを確認するには、引数なしで、またはスキーマコレクション名「MetaDataCollections」でGetSchemaメソッドを呼び出します。これにより、サポートされるスキーマコレクションのリスト、それぞれがサポートする制限の数、および使用する識別子部分の数を含むDataTableが返されます。

42
Tim Schmelter

そのサーバー上のデータベースのリストを返すことができるストアドプロシージャを作成できます。

SELECT name
FROM master.sys.databases

または

EXEC sp_databases
5
tranceporter

これにより、データベース名が取得されます。

var connectionString = string.Format("Data Source=localhost;User ID={0};Password={1};", userName, password);

DataTable databases = null;
using (var sqlConnection = new SqlConnection(connectionString))
{
    sqlConnection.Open();
    databases = sqlConnection.GetSchema("Databases");
    sqlConnection.Close();
}

if (databases != null)
{
    foreach (DataRow row in databases.Rows)
    {
        foreach (var item in row.ItemArray)
        {
            Console.Write("{0} ", item);
        }
        Console.WriteLine();
    }
}

最後にすべての印刷を除外してください。コンソールアプリですべてを投げて、動作を確認します。テーブル名は、row.ItemArrayのインデックス0にあります。

3
Gromer

SMO- SQL Server管理オブジェクト を使用できます。

これは、コードプロジェクトの2つのサンプルコードです。

SMOを使用したSQL Server認証

SMOを使用するデータベース

2

データベースの最新のリストは、データベース自体にあります。最初にmaster.sys.databasesからクエリを実行するには、デフォルトのデータベースとしてtempdbに接続してください(何かに接続する必要があるため)。

_select [name] from master.sys.databases_

次に、必要なデータベースで接続文字列を更新するか、ChangeDatabase()メソッドを使用してdbを変更します。

例えばconnection.ChangeDatabase(selectedDB);

マスターに接続することもできますが、オブジェクトを作成する前にデータベースの変更を忘れる場合があるため、tempdbでデフォルトの接続を維持したいです。 SQLの再起動時にtempdbが再作成されるため、迷惑メールはmasterよりもtempdbに入れたいと思います。

1
Code Magician

試すことができます

select * from master.sys.databases
0
Aghilas Yakoub