C# SQL Server用户实例错误:现有数据库已达到允许的最大数量
我在VisualStudio2008中使用C#来循环浏览我电脑上的MDF文件,并从中提取数据。我正在使用表适配器指向本地MDF文件 最近,我的一台电脑拒绝让我像它说的那样附加任何新的数据源 System.Data.SqlClient.SqlException:无法创建/附加任何新数据库,因为现有数据库的数量已达到最大值 允许的最大数量:32766 即使我启动一个新的Windows应用程序并尝试将MDF文件(在我的桌面上)作为数据源添加到该应用程序中,也会出现上述错误 有人能告诉我如何删除现有的连接吗 我的代码在另一台电脑上运行良好,我已在电脑上重新安装了Visual Studio,但仍然出现此错误 C#表适配器代码:C# SQL Server用户实例错误:现有数据库已达到允许的最大数量,c#,sql,sql-server,sql-server-express,user-instance,C#,Sql,Sql Server,Sql Server Express,User Instance,我在VisualStudio2008中使用C#来循环浏览我电脑上的MDF文件,并从中提取数据。我正在使用表适配器指向本地MDF文件 最近,我的一台电脑拒绝让我像它说的那样附加任何新的数据源 System.Data.SqlClient.SqlException:无法创建/附加任何新数据库,因为现有数据库的数量已达到最大值 允许的最大数量:32766 即使我启动一个新的Windows应用程序并尝试将MDF文件(在我的桌面上)作为数据源添加到该应用程序中,也会出现上述错误 有人能告诉我如何删除现有的连
tmTableAdapter.Connection.ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename='" + pathofmdffile + "';Integrated Security=True;Connect Timeout=30;User Instance=True";
tmTableAdapter.Connection.Open();
重新安装VS不会有帮助,因为错误来自SQL Server 请看这些MSDN页面,其中包含很多有用的信息:
- 在SSMS中,通过执行以下操作连接到最后连接的数据库:
SHUTDOWN;
- 转到对象资源管理器
- 与数据库引擎的新连接
- 在“连接到服务器”弹出窗口中:
- 单击“选项>>”按钮
- 转到“附加连接属性”选项卡
- 在文本区域中输入以下内容:
User Instance=true
- 单击“连接”按钮
- 展开“数据库”文件夹。您应该可以看到它们,命名为MDF文件的完整路径
- 右键单击数据库
- 转到“任务>”
- 第一个选项是“分离”
- 默认情况下,sqlservr.exe进程将挂起60分钟,在终止之前连接的任何数据库都会添加到列表中,并可能重置过期计数器。您可以通过连接到最近连接的DB(如上所述;这些步骤适用于新查询,或者如果通过对象资源管理器连接,则右键单击实例名称并转到“新建查询”),立即结束该过程,然后运行以下操作:
这将一次性清除所有连接的数据库SHUTDOWN;
- 将超时设置为小于60分钟。根据页面(与上述链接相同):
父实例上的系统管理员可以通过使用sp\u configure更改用户实例超时选项来设置用户实例的超时时间。默认值为60分钟
在SSMS中(确保已连接到父实例):
——查看当前设置(在“运行值”字段中) EXEC sp_配置“用户实例超时” --文件上说默认值是60,但我的是5 --如果看不到该选项,请运行以下命令: EXEC sp_配置“显示高级选项”,1; 重新配置; --要更改它,请运行以下命令: EXEC sp_配置“用户实例超时”,5;
- 使用“SQL Server Express实用程序”分离一个或多个数据库:
于2005年编写,自那时起未更新(当前版本为v1.0.2130)SSEUtil.exe
- 下载地址:
- 使用
命令-d[etach]| name=
- 查看以下目录,其中包含4个系统DBs:
- 在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
对于持续的基础,如果您将在一个循环中附加多个DB,您可以通过在使用每个DB时运行以下程序,在该过程中以编程方式除去它们:
使用[master];
ALTER DATABASE[{DatabaseName}]将单用户设置为立即回滚;
EXEC sp_detach_db@dbname=N'{DatabaseName}';
仅供参考,“用户实例”现在已被弃用。您应该研究如何使用。您是否曾经使用过
tmTableAdapter.Connection.Close()
?重新安装VS不会有帮助,因为错误来自SQL Server。如果连接到SSMS中的SQLEXPRESS实例并查看Databases文件夹,是否看到所有32766个?您可能需要分离它们。谢谢,是的,我会在C#代码后面的三行中执行tmTableAdapter.Connection.Close()。当我打开SSMS并连接到MYCOMPUTERNAME\SQLEXPRESS并查看Databases\System Databases时,我会看到4个DB(主数据库、模型数据库、msdb和tempdb)我应该查看的位置(抱歉,不太熟悉SQL Server)@johnsaunder DBs即使在关闭连接后仍保持连接。我在回答中详细说明了如何摆脱它们。非常感谢您的帮助。一个清晰简洁的答案(对于像我这样的学习者来说),带有帮助我学习更多精彩答案的链接。你能不能扩展一下一次关闭所有连接的功能。我可以像你上面所说的那样单独分离,但如果可能的话,我想选择并分离多个数据库(就像你说的,对所有32k数据库这样做是不实际的)。不过,我找到了一个解决方案“SQL Server Express实用程序”。请参阅以下链接:@lway Yes,该实用程序在第二个链接“SQLServer2005Express Edition用户实例”中提到,尽管它没有表示可以使用通配符进行多次分离。美好的我可以在我的回答中加上这一点。但这仍然不是一个好的编程方法,因为它需要剥离。相反,您仍然应该执行sp_detach_db