我们为什么需要连接字符串?

5

当我们在ASP.NET中连接数据库时,需要指定适当的连接字符串。然而,大多数其他指定数据的实例都是在对象内完成的。

例如,为什么我们不能有连接对象,如:

var connection = new connectionObject(){
   DataSource = "myServerAddress",
   IntialCatalog = "myDataBase",
   UserId = "myUsername",
   Password = "myPassword"
}

这比一些键值对字符串要好得多:

Data Source=myServerAddress;Initial Catalog=myDataBase;UserId=myUsername;Password=myPassword;

我能想到的唯一原因是允许在 web.config 中进行存储,但我们仍然可以在其中存储单个值。

我相信有很好的理由,但它们是什么呢?


1
当连接字符串诞生时,面向对象编程并不是真正可用的,我想 :-) - Rhapsody
2
你可以尝试一下,自己创建一个连接对象类,其ToString()方法可以使用其属性构建适当的连接字符串,这会很有趣。 - BoltClock
遗留问题。但我想你可以创建一个具有属性的连接字符串格式化类,这样就没有什么阻止了。 - Vlad
2
@BoltClock,+Vlad:DbConnectionBuilder似乎可以做你所描述的大部分工作。不过它使用的是名称/值对而不是预定义属性。 - Randy Levy
2
对于提供程序连接字符串,您可以使用特定于提供程序的DbConnectionBuilder版本。例如,SqlConnectionBuilder公开了已知SQL Server键/值对的强类型属性。 - Randy Levy
6个回答

4

在您上面的示例中,如果您想更改连接的任何部分,则需要重新编译和部署。为了解决这个问题,您需要将该信息存储在某个地方(配置文件)中。这基本上就是连接字符串所能做的 - 通过配置驱动连接。


4

传统、惯例,但最重要的是:灵活性。

试着编写(或仅想象)可以处理所有 MS-SQL、Oracle 和(嵌套的)ODBC 配置的 connectionConfig 对象。这些只是支持 .NET 的数据库中的几个。

此外,这样一个对象的主要目的是以(略微)人类可读的形式进行序列化。

因此,XML 是一种替代方案,而固定的(一组)对象则不是。


2
我相信这只是历史。连接字符串至少可以追溯到ADODB,例如在经典的Visual Basic中使用。而这可以追溯到ODBC,这可能就是这个想法的来源。我们不谈论.NET。我们谈论的是一个拥有各种不同对象概念(如果有的话)的世界。因此,似乎最容易的方法是使用DSL来指定连接。
对于这个,使用对象可能会变得有点复杂,因为不同的数据库驱动程序需要指定不同的字段。只是这么说...
此外,由于这些字符串非常传统,您可以期望任何您感兴趣的数据库都能理解这些字符串。很容易连接到您新的最喜爱的数据库!

谢谢,关于所有不同的数据库驱动程序,您可以为每个创建一个继承连接对象的对象。 - m.edmondson

0

你可以创建一个包装器来构建连接字符串,就像你的示例一样,但我怀疑你无法完全避免使用连接字符串。数据库期望一个连接字符串,而这已经是相当长时间以来的惯例了。既然它们仍然是惯例,那么可以安全地假设优点大于缺点。


0

连接字符串通常存储在XML配置文件(Web.config)或注册表中。在代码中硬编码连接字符串是不好的做法。此外,它们应该可由人类编辑和阅读。因此,无论如何都是文本。

(啊,还有一些特定于提供程序的密钥,据我所知...)


0
主要原因是因为连接到数据库所需的信息取决于数据库供应商。Oracle以一种方式处理,旧的Jet引擎以不同的方式处理,SQL Server以另一种方式处理,ODBC规范...你明白了吧。
请查看MSDN中DbConnectionStringBuilder类及其子类,以强类型方式创建连接字符串。

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