23

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

最初にデータベースを指定せずにサーバーに接続した後、データベースを一覧表示する方法を理解しようとしています。

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

したがって、基本的に私が望んでいるのは、エンドユーザーがSQLサーバーに接続し、接続してクエリできるデータベースのリストがドロップダウンリストに表示されるようにすることです。

アイデア?

4

6 に答える 6

43

あなたが使用することができます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が返されます。

于 2012-10-12T15:47:21.150 に答える
5

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

SELECT name
FROM master.sys.databases

また

EXEC sp_databases
于 2012-10-12T15:44:16.937 に答える
3

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

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();
    }
}

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

于 2012-10-12T15:51:43.980 に答える
2

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

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

SMOを使用したSQLServer認証

SMOを使用したデータベース

于 2012-10-12T15:47:55.497 に答える
1

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

select [name] from master.sys.databases

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

例えばconnection.ChangeDatabase(selectedDB);

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

于 2012-10-12T15:44:48.280 に答える
0

あなたはで試すことができます

select * from master.sys.databases
于 2012-10-12T15:45:21.043 に答える