C# 检测 SQL 数据库是不是为 PaaS(Amazon RDS 或 Azure SQL)

Posted

技术标签:

【中文标题】C# 检测 SQL 数据库是不是为 PaaS(Amazon RDS 或 Azure SQL)【英文标题】:C# detect if SQL database is PaaS (Amazon RDS or Azure SQL)C# 检测 SQL 数据库是否为 PaaS(Amazon RDS 或 Azure SQL) 【发布时间】:2021-11-11 00:19:27 【问题描述】:

我们在 .NET 应用程序中开发了自己的 SQL 数据库连接实用程序,但是如果它连接的 SQL 数据库是 PaaS 数据库,例如 Amazon RDS 或 Azure SQL,我们希望它的行为有所不同。原因是,我们希望在这些情况下禁用通过我们的实用程序备份和恢复数据库的功能。

检测此问题的最佳、万无一失的方法是什么?

其他一些帖子建议使用 SELECT SERVERPROPERTY ('edition'),但它适用于 Azure SQL,但对于 Amazon RDS 数据库仅返回“Express Edition(64 位)”。

【问题讨论】:

这能回答你的问题吗? How to test if database is hosted on SQL Azure? 真正的问题不是托管在哪里,而是检测连接字符串是否有足够的权限来执行操作。例如,数据库可以托管在共享公共云环境中的标准版本中...... 另外:***.com/questions/35915024/… 【参考方案1】:
    检查 DB 是否为 Azure SQL,
IF ServerProperty('Edition') = 'SQL Azure'
    PRINT 'true'

SELECT CASE ServerProperty('EngineEdition')
         WHEN 1 THEN 'Personal'
         WHEN 2 THEN 'Standard'
         WHEN 3 THEN 'Enterprise'
         WHEN 4 THEN 'Express'
         WHEN 5 THEN 'SQL Database'
         WHEN 6 THEN 'Azure Synapse Analytics'
         WHEN 8 THEN 'Azure SQL Managed Instance'
         WHEN 9 THEN 'Azure SQL Edge'
         WHEN 11 THEN 'Azure Synapse serverless SQL pool'
         ELSE 'Unknown'
       END
    检查数据库是否为 Amazon RDS-
if CHARINDEX(N'EC2AMAZ',(cast(serverproperty('ServerName') as nvarchar(256))))>0 
   return 1 
else 
   return 0

SELECT CASE WHEN db_id('rdsadmin') IS NULL THEN 0 ELSE 1 END AS RDS_DATABASE;

【讨论】:

以上是关于C# 检测 SQL 数据库是不是为 PaaS(Amazon RDS 或 Azure SQL)的主要内容,如果未能解决你的问题,请参考以下文章

如何检测 SELECT 中的列是不是可以为空?

检测 SQL Server 是不是正在运行

您如何确定您的 AD/AM 实例是不是已通过 C# 启动并运行?

c# 如何检测鼠标是不是按下

使用 C# 检测破坏性 SQL 查询

检测是不是从在 3.5 上运行的 C# 代码安装了 MSBuild/.net 4?