Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL Server用户实例错误:现有数据库已达到允许的最大数量_C#_Sql_Sql Server_Sql Server Express_User Instance - Fatal编程技术网

C# SQL Server用户实例错误:现有数据库已达到允许的最大数量

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文件(在我的桌面上)作为数据源添加到该应用程序中,也会出现上述错误 有人能告诉我如何删除现有的连

我在VisualStudio2008中使用C#来循环浏览我电脑上的MDF文件,并从中提取数据。我正在使用表适配器指向本地MDF文件

最近,我的一台电脑拒绝让我像它说的那样附加任何新的数据源

System.Data.SqlClient.SqlException:无法创建/附加任何新数据库,因为现有数据库的数量已达到最大值 允许的最大数量:32766

即使我启动一个新的Windows应用程序并尝试将MDF文件(在我的桌面上)作为数据源添加到该应用程序中,也会出现上述错误

有人能告诉我如何删除现有的连接吗

我的代码在另一台电脑上运行良好,我已在电脑上重新安装了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页面,其中包含很多有用的信息:

由于您使用的是“用户实例”,我想DBs在连接到主SQLEXPRESS实例时不会出现

检查事项:

  • 在SSMS中,通过执行以下操作连接到最后连接的数据库:

    SHUTDOWN;
    
    • 转到对象资源管理器
    • 与数据库引擎的新连接
    • 在“连接到服务器”弹出窗口中:
    • 单击“选项>>”按钮
    • 转到“附加连接属性”选项卡
    • 在文本区域中输入以下内容:
      User Instance=true
    • 单击“连接”按钮
    • 展开“数据库”文件夹。您应该可以看到它们,命名为MDF文件的完整路径
    • 右键单击数据库
    • 转到“任务>”
    • 第一个选项是“分离”

    显然,这对于32766数据库来说并不实用,但对于一些数据库来说,这是最好的选择

  • 默认情况下,sqlservr.exe进程将挂起60分钟,在终止之前连接的任何数据库都会添加到列表中,并可能重置过期计数器。您可以通过连接到最近连接的DB(如上所述;这些步骤适用于新查询,或者如果通过对象资源管理器连接,则右键单击实例名称并转到“新建查询”),立即结束该过程,然后运行以下操作:

    SHUTDOWN;
    
    这将一次性清除所有连接的数据库

  • 将超时设置为小于60分钟。根据页面(与上述链接相同):

    父实例上的系统管理员可以通过使用sp\u configure更改用户实例超时选项来设置用户实例的超时时间。默认值为60分钟

    在SSMS中(确保已连接到父实例):

    ——查看当前设置(在“运行值”字段中)
    EXEC sp_配置“用户实例超时”
    --文件上说默认值是60,但我的是5
    --如果看不到该选项,请运行以下命令:
    EXEC sp_配置“显示高级选项”,1;
    重新配置;
    --要更改它,请运行以下命令:
    EXEC sp_配置“用户实例超时”,5;
    
  • 使用“SQL Server Express实用程序”分离一个或多个数据库:

    • SSEUtil.exe
      于2005年编写,自那时起未更新(当前版本为v1.0.2130)

    • 下载地址:

    • 使用
      -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

    这主要是信息性的,因为只要SQL Server进程正在运行,就不能删除这些文件


对于持续的基础,如果您将在一个循环中附加多个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