Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.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# 如何确定连接的数据库是否区分大小写_C#_Sql Server_Oracle - Fatal编程技术网

C# 如何确定连接的数据库是否区分大小写

C# 如何确定连接的数据库是否区分大小写,c#,sql-server,oracle,C#,Sql Server,Oracle,我需要以编程的方式确定连接的数据库是否可以是Oracle 11g或Sql Server 2008之后的数据库,并将其设置为区分大小写,因此,当我比较两个字符串时,我知道一个是从数据库检索的字符串,一个是由用户输入的字符串,是否进行区分大小写的比较 这可能吗?如果可能,我该怎么做 TIA您可以只使用带有选择的案例 以上内容对于整个数据库会话非常通用。更具体地说,您必须深入了解每个DBMS的数据库配置 以下检查针对Oracle的区分大小写配置: SELECT CASE WHEN COUNT(*) =

我需要以编程的方式确定连接的数据库是否可以是Oracle 11g或Sql Server 2008之后的数据库,并将其设置为区分大小写,因此,当我比较两个字符串时,我知道一个是从数据库检索的字符串,一个是由用户输入的字符串,是否进行区分大小写的比较

这可能吗?如果可能,我该怎么做

TIA

您可以只使用带有选择的案例

以上内容对于整个数据库会话非常通用。更具体地说,您必须深入了解每个DBMS的数据库配置

以下检查针对Oracle的区分大小写配置:

SELECT CASE WHEN COUNT(*) = 2 THEN 'Insensitive' ELSE 'Sensitive' END
FROM NLS_SESSION_PARAMETERS
WHERE (PARAMETER = 'NLS_COMP' AND VALUE = 'LINGUISTIC')
    OR (PARAMETER = 'NLS_SORT' AND VALUE = 'BINARY_CI')
以下检查各级的特定SQL Server排序规则:

-- Server level
SELECT CASE WHEN SERVERPROPERTY('COLLATION') LIKE '%_CI_%' THEN 'Insensitive' ELSE 'Sensitive' END

-- Database level
SELECT CASE WHEN DATABASEPROPERTYEX('AdventureWorks', 'Collation') LIKE '%_CI_%' THEN 'Insensitive' ELSE 'Sensitive' END

-- Column level
SELECT CASE WHEN COLLATION_NAME LIKE '%_CI_%' THEN 'Insensitive' ELSE 'Sensitive' END
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @table_name
    AND COLUMN_NAME = @column_name
这对于检查不区分大小写的排序规则来说并不详尽,但基于SELECT name、description FROM::fn_helpcollations,它看起来相当不错

SQL Server排序规则的参考,参见OP上的注释

如何检查:
对于SQL Server:整洁。现在,对于Oracle版本,GulpThat应该适用于这两种情况,因为这两种情况都支持。我认为Oracle默认情况下是区分大小写的。如果您使用的是实体框架,那么只需使用上下文的数据库属性直接运行SQL查询即可。更新后的答案在每个dbms上更加具体。您必须小心谨慎,因为每个DBMS处理大小写敏感度的方式都非常不同,并且配置可能会根据您正在处理的服务器、数据库甚至列的不同而有所不同。Oracle要求From Dual子句,最后加上分号,但在其他方面都是一样的。
-- Server level
SELECT CASE WHEN SERVERPROPERTY('COLLATION') LIKE '%_CI_%' THEN 'Insensitive' ELSE 'Sensitive' END

-- Database level
SELECT CASE WHEN DATABASEPROPERTYEX('AdventureWorks', 'Collation') LIKE '%_CI_%' THEN 'Insensitive' ELSE 'Sensitive' END

-- Column level
SELECT CASE WHEN COLLATION_NAME LIKE '%_CI_%' THEN 'Insensitive' ELSE 'Sensitive' END
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @table_name
    AND COLUMN_NAME = @column_name