[英]SQL Server User Instances error: Existing databases has reached the max number allowed
我在Visual Studio 2008中使用C#在我的PC上循環MDF文件並從中提取數據。 我正在使用表適配器指向本地MDF文件。
最近我的一台PC拒絕讓我附上任何新的數據源,正如它所說的那樣
System.Data.SqlClient.SqlException:無法創建/附加任何新數據庫,因為現有數據庫的數量已達到允許的最大數量:32766
即使我啟動一個全新的Windows應用程序並嘗試將MDF文件(在我的桌面上)作為數據源添加到它,我也會收到上述錯誤。
誰能告訴我如何刪除/刪除現有連接?
我的代碼在另一台PC上工作正常,我在我的電腦上重新安裝了Visual Studio但仍然出現此錯誤。
C#表適配器代碼:
tmTableAdapter.Connection.ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename='" + pathofmdffile + "';Integrated Security=True;Connect Timeout=30;User Instance=True";
tmTableAdapter.Connection.Open();
重新安裝VS將無法解決,因為錯誤來自SQL Server。
看看這些有很多好消息的MSDN頁面:
由於您使用的是“用戶實例”,我想連接到主SQLEXPRESS實例時,DB不會顯示。
要檢查的事項:
在SSMS中,通過執行以下操作連接到上次連接的數據庫:
User Instance = true
顯然這對於32,766個數據庫來說並不實用,但對於少數數據庫來說這是最好的選擇。
默認情況下, sqlservr.exe進程會掛起60分鍾,並且在終止之前附加的任何數據庫都會添加到列表中,並可能會重置到期計數器。 您可以通過連接到最新附加的數據庫立即結束該過程(如上所述;這些步驟適用於新查詢,或者如果通過對象資源管理器連接,則右鍵單擊實例名稱並轉到“新查詢” ),並運行以下內容:
SHUTDOWN;
這將一次性清除所有連接的數據庫。
將超時設置為小於60分鍾。 根據SQL Server Express用戶實例頁面(與上面相同的鏈接):
父實例上的系統管理員可以使用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”分離一個或多個數據庫:
SSEUtil.exe
是在2005年編寫的,自那以后一直沒有更新(當前版本是v1.0.2130)
下載地址: https : //www.microsoft.com/en-us/download/confirmation.aspx?id = 3990
使用-d[etach] <dbpath[*]>|name=<dbname>
命令
查看以下目錄中將包含4個系統DB:
在XP / Vista上: C:\\ Documents and Settings {UserName} \\ 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 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.