4

Visual Studio 2008 で C# を使用して、PC 上の MDF ファイルをループし、その中からデータを抽出しています。テーブル アダプタを使用して、ローカルの MDF ファイルを指定しています。

最近、私の PC の 1 つが、新しいデータ ソースを接続することを拒否しました。

System.Data.SqlClient.SqlException: 既存のデータベースの数が許可されている最大数に達したため、新しいデータベースを作成/接続できません: 32766

新しい Windows アプリケーションを起動し、MDF ファイル (デスクトップ上) をデータ ソースとして追加しようとしても、上記のエラーが発生します。

既存の接続を削除/削除する方法を教えてもらえますか?

私のコードは別の PC で正常に動作し、PC に Visual Studio を再インストールしましたが、それでもこのエラーが発生します。

C# テーブル アダプター コード:

tmTableAdapter.Connection.ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename='" + pathofmdffile + "';Integrated Security=True;Connect Timeout=30;User Instance=True";
tmTableAdapter.Connection.Open();
4

1 に答える 1

5

エラーはSQL Serverから発生しているため、VSを再インストールしても役に立ちません。

多くの良い情報があるこれらの MSDN ページを見てください。

「ユーザー インスタンス」を使用しているため、メインの SQLEXPRESS インスタンスに接続するときに DB が表示されないと思います。

確認事項:

  • SSMS で、次の手順を実行して、最後にアタッチされた DB に接続します。

    • オブジェクト エクスプローラーに移動
    • データベース エンジンへの新しい接続
    • 「サーバーに接続」ポップアップで:
    • 「オプション >>」ボタンをクリックします。
    • [追加の接続プロパティ] タブに移動します。
    • テキスト領域に次のように入力します。
      User Instance = true
    • 「接続」ボタンをクリック
    • 「データベース」フォルダを展開します。MDF ファイルへのフル パスとして名前が付けられたすべてのファイルが表示されます。
    • データベースを右クリック
    • 「タスク >」に移動します。
    • 最初のオプションは「デタッチ」です

    明らかに、これは 32,766 のデータベースでは実用的ではありませんが、少数のデータベースでは最適なオプションです。

  • デフォルトでは、sqlservr.exeプロセスは 60 分間ハングアップし、終了する前に接続したデータベースはリストに追加され、有効期限カウンターがリセットされる可能性があります。アタッチされた最新の DB に接続することで、プロセスをすぐに終了できます (上記のとおり。これらの手順は新しいクエリに対して機能します。オブジェクト エクスプローラー経由で接続している場合は、インスタンス名を右クリックして [新しいクエリ] に移動します)。 )、次を実行します。

    SHUTDOWN;
    

    これにより、接続されているすべてのデータベースが一度に消去されます。

  • タイムアウトを 60 分未満に設定します。SQL Server Express User Instancesページによると(上記と同じリンク):

    親インスタンスのシステム管理者は、 sp_configureを使用してユーザー インスタンスのタイムアウトオプションを変更することにより、ユーザー インスタンスのタイムアウト期間を設定できます。デフォルトは 60 分です。

    SSMS で (インスタンスに接続していることを確認してください):

    -- View current setting (in the "run_value" field)
    EXEC sp_configure 'user instance timeout'
    -- Documentation says default is 60 but mine was 5
    
    
    -- If you can't see the option, run the following:
    EXEC sp_configure 'show advanced options', 1;
    RECONFIGURE;
    
    
    -- To change it, run the following:
    EXEC sp_configure 'user instance timeout', 5;
    
  • 「SQL Server Express Utility」を使用して、1 つ以上のデータベースをデタッチします。

  • 4 つのシステム DB がある次のディレクトリを調べます。

    • XP / Vista の場合: C:\Documents and Settings{ユーザー名}\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS

    • Windows 7 以降: C:\Users{UserName}\AppData\Local\Microsoft\Microsoft SQL Server Data\SQLEXPRESS

    SQL Server プロセスが実行されている限り、これらのファイルは削除できないため、これは主に情報提供のみを目的としています。


継続的に、多くの DB をループでアタッチする場合は、各 DB の使用が終了したときにsp_detach_dbを実行することにより、そのプロセスでプログラムによってそれらを取り除くことができます。

USE [master];
ALTER DATABASE [{DatabaseName}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
EXEC sp_detach_db @dbname =N'{DatabaseName}';

参考までに、「ユーザー インスタンス」は非推奨になりました。SQL Server Express LocalDB の使用を検討する必要があります。

于 2015-01-13T16:10:10.853 に答える