管理连接字符串

 

 

应用程序通过连接字符串提供的身份验证信息访问数据库,连接字符串明确告诉了程序连接的是那一个数据库、登录该数据库服务器的用户名、密码和安全性处理。没有连接字符串,应用程序无法与数据库交互,连接字符串作为参数包含了传递给数据源的初始化信息,在验证连接字符串信息后,数据源才可以设置该连接的各种选项,定义好连接字符串,在.NET Framework中一般存储在配置文件中。本节将通过定义一个与SQL Server数据库连接的连接字符串,具体讲解如何定义连接字符串、存储连接字符串、读取连接字符串。

1.定义连接字符串

连接到数据库服务器通常由几个需要很长时间的步骤组成,首先必须建立物理通道,必须与服务器进行初次握手,必须分析连接字符串信息,必须由服务器对连接进行身份验证,必须运行检查以便在当前事务中登记等等,所以连接字符串是创建应用程序和数据库连接的桥梁,创建连接字符串,如代码12.1所示。

代码12.1 连接字符串

Data Source=YOUND"YOUND;Initial Catalog=itZcn_SqlServer;User ID=sa;Password=0

Data Source=YOUND"YOUND;Initial Catalog=itZcn_SqlServer;Integrated Security=True

"Data Source=."SQLEXPRESS;AttachDbFilename=|DataDirectory|"MyTest.mdf;Integrated Security=True;User Instance=True"

在代码12.1中,共有三个连接字符串,下面介绍连接字符串中的相关属性:

Data Source 表示要连接的数据库服务器。SQL Server允许在同一台计算机上运行多个不同的数据库服务器实例,Data Source可以由下列字符串代替:“server”,“address”,“addr”和“network address

AttachDbFilename 该属性的是加载的数据库路径,DataDirectory表示的是数据库文件在本程序的目录下

Integrated Security 该属性表示用户使用Windows身份验证。通常情况下,建议用户使用Windows身份验证,通常称为集成安全性,连接到服务器数据库上。要指定Windows身份验证,可以对SQL Server .NET Framework数据提供程序。Integrated Security设置为trueSSPI都可以指定为Windows身份验证,false时,需要在连接中指定用户ID和密码

User Instance:该属性用来判断在DbConnection.Open()方法执行时是否使用当前用户来启动SQL Express的一个实例。在UserInstance=true情况下,SQLServerExpress为了把数据库附加到新的实例,建立一个新的进程,在打开连接的用户身份下运行。在ASP.NET应用程序中,这个用户是本地的ASPNET帐号或默认的 NetworkService,这依赖于操作系统。为了安全地附加非系统管理员帐号提供的数据库文件,必须建立一个独立的SQL Server用户实例

User ID 表示登录数据库的用户名

Password 表示用户名密码

 

 

如果在连接的时候出现“由于启动用户实例的进程时出错,导致无法生成SQL Server的用户实例。该连接将关闭。”错误,直接将连接字符串中的“User Instance=True”修改为“User Instance=False”即可。

 

2.存储连接字符串

保护对数据源的访问是安全应用程序最重要的目标之一。为了帮助限制对数据源的访问,必须保护连接信息的连接信息。以纯文本形式存储用户标识和密码会造成严重的安全问题,例如,在源代码中存储用户表示和密码。即使为外部源提供包含用户标识和密码信息的编译版代码,编译的代码也可能会被反汇编,用户标识和密码可能会被使用 MSIL反汇编程序(Ildasm.exe)工具公开。因此,关键信息一定不要存在于代码中。这样我们就需要把连接字符串存储到特定的文件上。

开发人员存储连接字符串方法是直接把连接字符串存储在应用程序配置文件中,或者是在应用程序的某个地方硬编码连接字符串,或者是预定义的方式存储连接字符串,甚至是以类型未知的方式使用数据库连接。要定义并存储数据库连接字符串,应使用配置文件中新的<ConnectionStrings>段。在这里可以指定连接的名称、数据库连接字符串的参数,还需要指定这个连接类型的提供程序,下面为一个存储连接字符串的配置文件,如代码12.2所示。

代码12.2 存储连接字符串的配置文件

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

    <configSections>

    </configSections>

    <connectionStrings>

        <add name="FormConnectionString"

            connectionString="Data Source=YOUND"YOUND;Initial Catalog=itZcn_SqlServer;User ID=sa;Password=0"

            providerName="System.Data.SqlClient" />

        <add name="Database1ConnectionString"

            connectionString="Data Source=|DataDirectory|"Database1.sdf"

            providerName="Microsoft.SqlServerCe.Client.3.5" />

        <add name="WindowsConnectionString"

            connectionString="Data Source=YOUND"YOUND;Initial Catalog=itZcn_SqlServer;Integrated Security=True"

            providerName="System.Data.SqlClient" />

    </connectionStrings>

</configuration>

在代码12.2中,在配置文件的<connectionStrings>配置节点中,设置了三个数据库连接字符串,指向itZcn_SqlServer数据库,代码12.2中的连接字符串都是通过<add>子结点进行添加。

3.读取连接字符串和测试连接

System.Configuration命名空间包含提供用于处理配置数据的编程模型的类型。ConnectionStringSettings类具有两个属性,映射到代码12.2所示的<connectionStrings>示例部分中显示的名称,即<add>内的name值。在.NET Framework中,通过将连接字符串的名称传递给ConfigurationManger,再由其返回ConnectionStringStrings,以便从配置文件中检索连接字符串。

映射并读取连接字符串后,测试通过该连接字符串,是否可以连接到数据库,通过使用.NET数据提供程序的连接对象Connection建立与数据库的连接,不同的数据库会有不同的.NET数据提供程序,本节通过创建一个与SQL Server数据库连接的示例,由于是和SQL Server数据库连接,所以使用SqlConnection对象。该示例如代码12.3所示。

 

在编写程序添加System.Configuration命名空间时,不要直接引用Stem.Configuration命名空间,首先要在项目的引用文件夹下添加了该命名空间的应用后,再在程序中引用System.Configuration命名空间

 

代码12.3 读取连接字符串,并测试连接

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Configuration;

using System.Data.SqlClient;

namespace _12._1

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        public string GetConnectionString()

        {

            string connString = ConfigurationManager.ConnectionStrings["FormConnectionString"].ConnectionString;

            if (connString != null)

            {

                return connString;

            }

            else

            {

                return null;

            }

        }

        private void Form1_Load(object sender, EventArgs e)

        {

            if (GetConnectionString() != null)

            {

                SqlConnection conn = new SqlConnection(GetConnectionString());

                try

                {

                    conn.Open();

                    if (conn.State == ConnectionState.Open)

                    {

                        label1.Text = "该连接的字符串为:"r"n";

                        label1.Text += GetConnectionString() + ""r"n";

                        label1.Text += "连接数据库成功";

                    }

                }

                catch (Exception ex)

                {

                    label1.Text = ex.Message;

                }

                finally

                {

                    conn.Close();

                }

            }

        }

    }

}

在代码12.3中,要建立与数据库的连接,首先要获得连接字符串,然后在实例化SqlConnection对象,然后使用该对象的Open方法就可以打开数据库。由于该示例连接的Sql Server数据库,所以要添加对System.SqlClient命名空间的引用。此时,该示例就设计完成了,运行程序,窗体效果如图12-1所示。

12-1 窗体效果图

posted @ 2008-08-16 16:20  yound  阅读(1070)  评论(0编辑  收藏  举报