【问题标题】:Database drivers specification in code代码中的数据库驱动程序规范
【发布时间】:2018-09-22 03:24:10
【问题描述】:

大家早上好,

最近我遇到了 Python 和 C# 中的数据库连接问题。

例如,假设我们要连接 SQL Server。在 .NET (C#) 中,我们只需要知道服务器名称、凭据,我们就可以使用 SqlConnection 对象连接到 DB。很清楚。

现在,在 Python 中,当使用 pypyodbc 时,我们需要另外指定驱动程序。问题来了:

为什么在 Python 中我们必须指定驱动程序?我们不必在 C# 中指定它。

另一方面,如果指定驱动程序如此重要,那为什么我们不必在 C# 中指定呢?

我知道,在 C# 中我们有专门的 SQL Server 类(Python 吗?或pypyodbc 是唯一的选择?),这是否意味着它有一些方法来解析要使用的驱动程序?甲骨文也一样吗?

【问题讨论】:

    标签: c# python sql sql-server oracle


    【解决方案1】:

    我对 python 一无所知,但我认为这应该回答你的主要问题:

    SqlConnection是专门为SQL server设计的,所以你不需要指定驱动,因为它使用的是自己指定的驱动。
    来自 Microsoft 文档上的 SqlConnection.ConnectionString Property 页面:

    ConnectionString 类似于 OLE DB 连接字符串,但不相同。与 OLE DB 或 ADO 不同,返回的连接字符串与用户设置的 ConnectionString 相同,如果 Persist Security Info 值设置为 false(默认值),则减去安全信息。 SQL Server 的 .NET Framework 数据提供程序不会在连接字符串中保留或返回密码,除非您将 Persist Security Info 设置为 true。

    (强调我的,引号中的其他内容只是为了提供上下文。)

    然后在页面下方:

    用于 SQL Server 的 .NET Framework 数据提供程序使用自己的协议与 SQL Server 进行通信。因此,它不支持在连接 SQL Server 时使用 ODBC 数据源名称 (DSN),因为它没有添加 ODBC 层。

    (再次强调我的。)

    在使用OdbcConnectionOleDbConnection等其他连接类时,需要在连接字符串中指定驱动程序。

    Odbc Connection Strings 使用关键字Driver
    对于OleDb Connection Strings,使用关键字Provider

    关于 Oracle,.Net 框架有一个名为 System.Data.OracleClient 的命名空间,但它已被弃用(来自 Oracle and ADO.NET):

    System.Data.OracleClient 中的类型已弃用。这些类型在当前版本的 .NET Framework 中仍受支持,但将在未来版本中删除。 Microsoft 建议您使用第三方 Oracle 提供商。

    我猜 Oracle 自己的 ADO.Net 实现也适用于它自己的驱动程序。如果你真的想知道,你可以在他们的文档中查找。

    【讨论】:

    • 您的假设是正确的:对于System.Data.OracleClient 和Oracle 自己的ADO.Net 实现(即Oracle.ManagedDataAccessOracle.DataAccess),您不必指定任何驱动程序。
    猜你喜欢
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    相关资源
    最近更新 更多