ADO.NET数据访问技术

一、使用SqlConnection类连接数据库

//需要添加如下的命名空间
using System.Data.SqlClient;

   protected void Button1_Click(object sender, EventArgs e)
    {
        //ConnectionString定义了连接字符串
        string ConnectionString = "Data Source=. ; Initial Catalog=Pubs; User ID=sa";
        //使用连接字符串构造一个SqlConnection实例
        SqlConnection conn = new SqlConnection(ConnectionString);
        try
        {
            //打开连接
            conn.Open();
            //如果当前状态打开,在控制台输出
            if (conn.State == ConnectionState.Open)
            {
                Label1.Text = "当前数据库已经连接!<br/>";
                Label1.Text += "连接字符串为:" + conn.ConnectionString;
            }
        }
        catch (SqlException ex)
        {
            Label1.Text = "当前数据库已经失败!<br/>";
            Label1.Text += "失败的原因是:" + ex.Message;
        }
        finally
        {
            //调用Close方法即使关闭连接
            if (conn.State == ConnectionState.Open)
            {
                conn.Close();
            }
        }
    }

二、使用SqlConnectionStringBuilder连接字符串

//引入如下名词空间
using System.Data.SqlClient;

    protected void Button1_Click(object sender, EventArgs e)
    {
        SqlConnectionStringBuilder connBuider = new SqlConnectionStringBuilder();
        //DataSource表示数据源位置,可以是IP地址,也可以指定一个DNS名称
        connBuider.DataSource = ".";
        //InitialCataLog指定需要连接数据库的名称
        connBuider.InitialCatalog = "Pubs";
        //IntegratedSecurity表示是否使用整合身份验证进行登录数据库
        connBuider.IntegratedSecurity = false;
        //不使用整合Windows身份验证时,指定用户ID和密码
        connBuider.UserID = "sa";
        connBuider.Password = "";

        //使用SqlConnetionStringBuilder.ToString()方法将会输出连接字符串
        using(SqlConnection conn=new SqlConnection(connBuider.ToString()))
            try
            {
                //打开连接
                conn.Open();
                //如果当前状态打开,在控制台输出
                if (conn.State == ConnectionState.Open)
                {
                    Label1.Text = "当前数据库已经连接!<br/>";
                    Label1.Text += "连接字符串为:" + conn.ConnectionString;
                }
            }
            catch (SqlException ex)
            {
                Label1.Text = "当前数据库已经失败!<br/>";
                Label1.Text += "失败的原因是:" + ex.Message;
            }
            finally
            {
                //调用Close方法即使关闭连接
                if (conn.State == ConnectionState.Open)
                {
                    conn.Close();
                }
            }
    }

三、关闭和释放连接

      连接在关闭后应该尽早地释放,SqlConnection提供了Close方法,用于关闭一个连接。除此之外,SqlConnection的基类实现了 IDDispose接口的Dispose方法,这个方法不仅可以关闭一个连接,而且还可以清理连接所占用的资源。

     连接可以关闭之后再次打开:

如:Open();
      Close();
      Open();

此执行不会出现任何问题,但是,若是连接释放后再打开

即:Open();
       Dispose();
       Open();

则会抛出异常。

四、在Web.config配置文件中保存连接字符串

     连接信息最好保存在Web.config配置文件中,以便于维护和修改。在Web.config配置文件的<configuration>节添加如下代码:

<configuration>
<connectionStrings>
    <add name="NorthwindConnectionString" connectionString="Data Source=. ;Initial Catalog=Northwind; User ID=sa;pwd="/>
</connectionStrings>
</configuration>

如果程序员不愿意手工创建这段代码,可以在页面上放置一个SqlDataSource控件,在该控件的任务窗口中选择配置数据源,根据提示一步步配置,出现如下图所示的提示后则连接字符串被保存到Web.config配置文件中

 

    为了从Web.config中获取连接字符串,需要使用System.Web.ConfigurationManager类

//需要添加此名词空间
using System.Web.Configuration;
using System.Data.SqlClient;

    protected void Button1_Click(object sender, EventArgs e)
    {
        //使用WebConfigurationManager获取Web.config配置文件中的连接字符串
        string ConnectionString = WebConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
        //使用连接字符串构造一个SqlConnection实例
        SqlConnection conn = new SqlConnection(ConnectionString);
        try
        {
            conn.Open();
            //如果当前连接状态打开,则显示打开成功的信息
            if (conn.State == ConnectionState.Open)
            {
                lblInfo.Text = "当前数据库已连接!<br/>";
                lblInfo.Text += "连接字符串为:" + ConnectionString;
            }
        }
        catch (SqlException ex)
        {
            lblInfo.Text = "数据库连接失败!<br/>";
            lblInfo.Text += "失败的原因是:" + ex.Message;
        }
        finally
        {
            //调用Close()方法即使地关闭连接
            if (conn.State == ConnectionState.Open)
            {
                conn.Close();
            }
        }
    }

五、连接池技术

      连接到数据库服务器通常需要一定的时间,且服务器也需要一定的资源来处理连接,Web应用程序有时处理成千上万的连接,需要相当多的资源来处理连接。 ADO.NET具有连接池的特性,连接池的功能是保留一定数量的连接,当用户使用相同的连接字符串再次连接服务器时,连接将返回到连接池 中,ADO.NET将使用连接池中的连接而不用重新发起一次连接过程。当调用Close方法关闭连接时,连接将会返回到连接池中,下次再次调用Open方 法时,将从连接池中取出一个连接使用。

使用连接池和不使用连接池的效果如下:

//使用连接池技术
protected void btnpool_Click(object sender, EventArgs e)
    {
        //指定连接字符串
        String connectionstring = "Data Source=. ;Initial Catalog=Pubs ;User ID =sa;";
        SqlConnection conn = new SqlConnection(connectionstring);

        //获取在开始连接之前的时间刻度数
        long startTicks = DateTime.Now.Ticks;
        //依次打开和关闭100次连接
        for (int i = 1; i <= 100; i++)
        {
            conn.Open();
            conn.Close();
        }
        long endTicks = DateTime.Now.Ticks;
        lblpool.Text = "使用连接池后所花费的时间是:" + (endTicks - startTicks).ToString() + "Ticks";

        //使用完毕后释放连接
        conn.Dispose();
    }

//不使用连接池技术
    protected void btnnopool_Click(object sender, EventArgs e)
    {
        //指定连接字符串.注意这里使用pooling=false禁用了连接池
        String connectionstring = "Data Source=. ;Initial Catalog=Pubs ;User ID =sa;pooling=false";
        SqlConnection conn = new SqlConnection(connectionstring);

        //获取在开始连接之前的时间刻度数
        long startTicks = DateTime.Now.Ticks;
        //依次打开和关闭100次连接
        for (int i = 1; i <= 100; i++)
        {
            conn.Open();
            conn.Close();
        }
        long endTicks = DateTime.Now.Ticks;
        lblnopool.Text = "不使用连接池后所花费的时间是:" + (endTicks - startTicks).ToString() + "Ticks";

        //使用完毕后释放连接
        conn.Dispose();
    }

 

运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值