当前位置:首页 > 问答 > 正文

怎么用connectionStrings来搞定SQL Server数据库连接这事儿

要搞清楚怎么用 connectionStrings 来连接 SQL Server,你首先得明白它是个啥,简单说,connectionStrings 就是你写在一个特定地方的一段“地址条”,就像你要去朋友家做客,你得知道他的具体地址、门牌号,还得有钥匙或者知道密码才能进门,connectionStrings 干的就是这个事儿:它告诉你的程序,数据库这个“朋友家”在哪儿,以及用什么“钥匙”开门。

这个“地址条”不能随便写在程序的任何地方,不然太乱了,也不好管理,我们会把它写在一个叫“配置文件”的特殊文件里,对于 .NET 的程序(比如用 C# 写的网站或者桌面软件),这个文件通常叫 Web.config(网站用)或者 App.config(桌面软件用),你把 connectionStrings 写在这里面,程序运行的时候就会自动来这个文件里读取信息,然后就知道该怎么去连接数据库了。

这个“地址条”具体长什么样呢?它有一个固定的格式,根据微软官方的 MSDN 文档和 .NET 开发中的通用实践,一个最基础的样子是这样的:

<connectionStrings>
    <add name="MyConnectionString" 
         connectionString="Data Source=服务器名或IP;Initial Catalog=数据库名;User ID=用户名;Password=密码;"
         providerName="System.Data.SqlClient" />
</connectionStrings>

别被这些尖括号吓到,我们把它拆开,一个一个词儿看明白:

  • <connectionStrings></connectionStrings>:这一对标签就像一个大括号,告诉程序:“喂,从这里开始,到那里结束,里面包着的都是数据库的连接信息。” 你可以在里面写多个连接字符串,分别给不同的数据库用。
  • <add ... />:这是在“大括号”里面添加一条具体信息的指令。add 添加”的意思。
  • name="MyConnectionString":这是你给这个连接字符串起的一个名字,相当于给这个“地址条”贴个标签,这个名字很重要,因为你在程序代码里,就是通过这个名字来找到并使用这条连接信息的,你可以随便起,OrderDB”、“UserDB”,只要你自己能分清就行。
  • connectionString="...":这是“地址条”的核心内容,所有的关键信息都写在这里面,我们待会要重点讲它。
  • providerName="System.Data.SqlClient":这一句是告诉程序,你要用哪个“司机”去连接数据库,对于 SQL Server 数据库,你就固定写 System.Data.SqlClient 就行,这是微软官方提供的专门连接 SQL Server 的“司机”。

我们集中火力看最关键的 connectionString 里面怎么写,它是由一系列“键=值”的组合构成的,中间用分号隔开,常用的“键”有这么几个,你必须弄懂:

  1. Data Source(数据源): 这个就是数据库服务器的地址,它可以是以下几种情况:

    • 如果数据库装在你自己的电脑上,你可以写 localhost(local)、 或者 0.0.1
    • 如果数据库在另一台电脑(服务器)上,你就得写那台电脑的IP地址(168.1.100)或者那台电脑在网络上的名字(DBSERVER01)。
    • 如果用的是 SQL Server 的特殊实例,还要加上实例名,我的电脑名\SQLEXPRESS
  2. Initial Catalog(初始目录): 这个听起来有点绕,其实非常简单,就是你要连接的那个具体的数据库的名字,一个 SQL Server 服务器上可以创建很多个数据库,你得指定你到底要进哪个“房间”。

    怎么用connectionStrings来搞定SQL Server数据库连接这事儿

  3. User ID(用户ID) 和 Password(密码): 这就是你的“钥匙”,即登录数据库用的用户名和密码,这是一种登录方式,叫做“SQL Server 身份验证”。

  4. Integrated Security(集成安全): 这是另一种“钥匙”,更安全也更方便,如果你写 Integrated Security=True 或者 Integrated Security=SSPI,就意味着:“不要用单独的用户名密码了,直接用当前登录Windows系统的这个用户的身份去连接数据库。” 这通常用在公司内部系统,你的电脑和数据库服务器在同一个局域网内,并且权限都设置好的情况下。注意:如果你用了 Integrated Security,就不能再写 User IDPassword 了,它们俩是互斥的。

根据你的情况,你的 connectionString 可能长这样:

例子1:用用户名密码连接本地的一个叫“MyDatabase”的数据库 Data Source=localhost;Initial Catalog=MyDatabase;User ID=sa;Password=你的密码;

怎么用connectionStrings来搞定SQL Server数据库连接这事儿

例子2:用Windows身份验证连接服务器上的数据库 Data Source=192.168.1.100;Initial Catalog=ReportDB;Integrated Security=True;

把上面这些部分组合起来,放到配置文件里,一个完整的配置片段就出来了,假设我们采用例子1的方案,Web.config 文件里相关部分就是这样:

<configuration>
  ... (这里可能有很多其他配置)
  <connectionStrings>
    <add name="MyDB" 
         connectionString="Data Source=localhost;Initial Catalog=MyDatabase;User ID=sa;Password=123456;"
         providerName="System.Data.SqlClient" />
  </connectionStrings>
  ... (这里可能还有很多其他配置)
</configuration>

好了,“地址条”写好了,那在程序代码里怎么用它呢?也非常简单,在 C# 代码中,你大概会这样写(根据微软提供的 ADO.NET 编程模型):

// 1. 从配置文件里,根据名字("MyDB")取出连接字符串
string connectionString = ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString;
// 2. 创建一个连接对象,把刚才取到的字符串给它
using (SqlConnection conn = new SqlConnection(connectionString))
{
    // 3. 打开连接,现在程序就和数据库正式“连上线”了
    conn.Open();
    // 4. 这里你就可以执行SQL命令了,比如查询数据、增删改等等...
    // (这部分是另一个话题,不在这里详细展开)
} // 5. 用 using 关键字,程序会自动关闭连接,释放资源,非常省心。

你看,核心就是第一句 ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString,你的程序只要知道你在配置文件里给连接字符串起的那个名字(比如这里的 "MyDB"),它就能把整段连接信息抓出来用。

说说把连接字符串写在配置文件里的巨大好处,最大的好处就是灵活安全,如果你的数据库服务器地址变了,或者密码改了,你不需要重新打开复杂的程序源代码,去一行一行地找、一行一行地改,你只需要用记事本打开这个 Web.config 或者 App.config 文件,修改一下 connectionString 里的内容,保存就行了,程序下次运行的时候,自动就会读取新的设置,这就像你搬家了,只需要更新一下通讯录里的地址,而不需要通知到每一个可能来找你的朋友。

用 connectionStrings 搞定 SQL Server 数据库连接这事儿,三步走:第一,搞清楚你的数据库地址、名字和登录方式;第二,按照格式把这些信息写到配置文件里;第三,在代码里用 ConfigurationManager 把它读出来用,就这么简单。