连接字符串和DSN有什么区别?

4
我很难理解DSN和连接字符串之间的区别。问题在于DS能够提供数据库名称、数据库驱动程序、用户名和密码等细节信息。DSN不是可以使用这些详细信息连接到数据库吗?我需要一个解释,因为这个问题已经困扰我很久了。
DSN包含建立数据库与客户端之间连接所需的必要细节信息,对吗?如果是这样,那么为什么还需要连接字符串呢?
请回答,谢谢您抽出时间来回答!

我很惊讶没有人回答这个问题。这是一个合理的问题,我也遇到了困难。我得到的回答非常模糊。 - Breaz Freind
嗯,我刚看到它 :) - Cetin Basoz
1个回答

7

DSN代表数据源名称,它作为用户或系统值保存在注册表中。如果存在该值,您可以仅通过其名称引用连接。这种方法看起来很诱人,并且许多旧示例实际上使用并鼓励使用DSN。

然而,连接字符串是以字符串形式编写的连接信息,不需要保存在注册表中。它可以动态生成,或者构建并保存(可能加密)到开发人员选择的位置(甚至可能是另一个本地数据库)-(在某种程度上是由开发人员发明的DSN)。它具有更高的灵活性,许多开发人员更喜欢使用它而不是DSN。


2
那么 DSN 和连接字符串的目的是相同的,都是用于与数据库建立连接,但连接字符串具有更多的优势?此外,“Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;”有人说“myServerAddress”是DSN,而整个字符串才是连接字符串。但是,连接字符串不包括“数据库名称 目录 数据库驱动程序 用户ID 密码”吗?所以整个字符串不就是DSN吗?这部分让我感到非常困惑。 - Breaz Freind
1
那个“某人”是错的。“myServerAddress”不是DSN。也许连接字符串的“Data Source”属性会误导(也用作“server”)。一个是数据源本身,另一个(DSN)是指向整个数据源连接的符号名称。连接字符串“通常”但并非总是包含数据库名称。它包含驱动程序(或在OLEDB的情况下提供程序)名称。为了避免混淆,您可以简单地认为DSN是指向整个连接字符串的短唯一“名称”。 - Cetin Basoz
1
我现在明白了,DSN是与数据源的连接,就像连接一样,但连接字符串更加灵活,因为您可以添加更多参数,例如“Timeout”(我在连接字符串中看到几次),而DSN只是一个简单的连接,没有任何额外的东西。非常感谢您治愈我的可怕病!:D - Breaz Freind
1
你知道SQL Server是否将其连接字符串存储在某个地方吗? - MSIS
1
@MSIS,不,它没有。 - Cetin Basoz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接