我在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();
答案 0 :(得分:5)
重新安装VS将无法解决,因为错误来自SQL Server。
查看这些有很多好消息的MSDN页面:
由于您使用的是“用户实例”,我想连接到主SQLEXPRESS实例时,DB不会显示。
要检查的事项:
在SSMS中,通过执行以下操作连接到上次连接的数据库:
User Instance = true
显然这对于32,766个数据库来说并不实用,但对于少数数据库来说这是最好的选择。
默认情况下, sqlservr.exe 进程会挂起60分钟,并且在终止之前附加的所有数据库都会添加到列表中,并可能会重置到期计数器。您可以通过连接到最新附加的数据库立即结束该过程(如上所述;这些步骤适用于新查询,或者如果通过对象资源管理器连接,则右键单击实例名称并转到“新查询” ),并执行以下操作:
SHUTDOWN;
这将一次性清除所有连接的数据库。
将超时设置为小于60分钟。根据{{3}}页面(与上面相同的链接):
父实例上的系统管理员可以使用 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)以来尚未更新
使用-d[etach] <dbpath[*]>|name=<dbname>
命令
查看以下目录中将包含4个系统数据库:
在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进程正在运行,就无法删除这些文件。
对于一个持续的基础,如果你要在一个循环中附加许多数据库,你可以在完成使用每个数据库时运行https://www.microsoft.com/en-us/download/confirmation.aspx?id=3990以编程方式去除它们:
USE [master];
ALTER DATABASE [{DatabaseName}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
EXEC sp_detach_db @dbname =N'{DatabaseName}';
仅供参考,“用户实例”现已弃用。您应该考虑使用sp_detach_db。