如何检查我的SQL Server Express数据库是否超过10 GB的大小限制?

Aec*_*Liu 2 c# sql-server entity-framework sql-server-2008r2-express entity-framework-5

我正在开发一个网站,它使用SQL Server 2008 R2 Express作为其数据库.在测试中,有大量数据和图像存储在此数据库中.

据wiki称,SQL Server Express版本的大小限制为10 GB.当我插入数据并达到限制时,将抛出什么异常?或者,如何通过代码检测接近极限问题?

我使用EF 5和代码优先的方法来插入大数据集.

Mar*_*gle 5

在测试中我看到:

sp_spaceused
Run Code Online (Sandbox Code Playgroud)

将无法按预期工作,在删除大量记录后显示12GB.关于查询sys.databases的其他答案对我来说还不够清楚.

搜索我发现一个非常好的解释关于Ramons博客上的SQL Server 2012 Express Edition 10GB大小限制[EDIT2018更新链接]

SELECT
  [name] AS [Filename],
  [size]/128.0 AS [Filesize],
  CAST(FILEPROPERTY([name],'SpaceUsed') AS int)/128.0 AS [UsedSpaceInMB],
  [size]/128.0 - CAST(FILEPROPERTY([name],'SpaceUsed') AS int)/128.0 AS [AvailableSpaceInMB],
  [physical_name] AS [Path]
FROM sys.database_files
Run Code Online (Sandbox Code Playgroud)

"... space包含事务日志,它还包括这些文件中所有未使用的空间....当SQL Server Express无法为数据文件保留更多空间时,它将开始抱怨."

所以检查

CAST(FILEPROPERTY([name],'SpaceUsed') AS int)/128.0 AS [UsedSpaceInMB]
Run Code Online (Sandbox Code Playgroud)

似乎是最好的选择.

结合EF我对DB的请求看起来像

string sqlSelect = "SELECT CAST(FILEPROPERTY([name],'SpaceUsed') AS int)/128.0 AS [UsedSpaceInMB] FROM sys.database_files";
var dbResult = dbInstance.Database.SqlQuery<Decimal>(sqlSelect).FirstOrDefault();
double spaceUsedInGb = Convert.ToDouble(dbResult)/1024;
Run Code Online (Sandbox Code Playgroud)