Connection对象也称为数据库连接对象,Connection对象的功能是负责对数据源的连接。所有Connection对象的基类都是DbConnection类。
Connection对象有两个重要属性:
ConnectionString:表示用于打开 SQL Server 数据库的字符串;
State:表示 Connection 的状态,有Closed和Open两种状态。
Connection对象有两个重要方法:
Open()方法:指示打开数据库;
Close()方法:指示关闭数据库。
在实际开发中很多朋友经常询问数据库连接字符串该怎么写,其实有一个很简单的技巧,我们可以在Visual Studio 2005工具箱中找到数据分组,如下图:
打开或新建一个asp.net页面,在设计视图下双击SqlDataSource控件就会添加一个SqlDataSource到当前页面,如下图:
当我们用鼠标单击SqlDataSouce控件时会出现一个小三角箭头,如上图所示,当我们点击这个三角箭头时会出现如下图所示的界面:
点击“配置数据源”时会出现下面的界面:
点“新建连接”后出现如下界面:
在这个界面中默认是连接到SQL Server数据库,其实我们还可以利用这个向导连接到其它数据库的,我们点击“数据源”旁边的“更改”按钮出现如下图所示的界面:
从上面的界面中我们可以看出可以利用这个连接向导配置连接到Access数据库文件、ODBC数据源、SQL Server数据库、SQL Server手机版数据库、SQL Server数据库文件、Oracle数据库文件及其它数据库。
在这里我们选择Microsoft SQL Server选项,连接到SQL Server数据库。如果我们在局域网中,我们可以点击“添加连接”界面中的刷新按钮来查看局域网中有哪些SQL Server数据库可以连接。连接到数据库可以用下面的方式:
(1)如果要连接的数据库服务器与开发者的机器在同一个局域网里,可以使用局域网IP地址或者局域网中的电脑主机名;
(2)如果要连接的数据库服务器与开发者的机器不在同一个局域网内,那么就要求数据库服务器必须有一个公网IP,我们可以使用公网IP来连接,如果数据库服务器还有互联网域名,那么用互联网域名也是可以的。
(3)如果要连接的数据库服务器与开发者所使用的机器是同一台机器,那么可以使用以下几种方式之一:”(local)”或者”.”或者”127.0.0.1”。
需要注意的是,如果在一台机器上运行者同一种数据库的不同版本,比如说在”zhoufoxcn”这台主机上同时运行着SQL 2000、SQL 2005和SQL Express三种版本,并且它们所使用的Windows服务名分别为”SQL2000”、”SQL2005”和”SQLExpress”,那么我们要连接到SQL 2000这个数据库上所使用的服务器名就应该填写”zhoufoxcn/SQL2000”这种“主机名/实例名”的方式或者“主机IP/实例名”,这种情况在同时安装了Visual Studio 2005和SQL 2005的朋友那里很常见,因为SQL Express是针对学生的功能有限的免费版本,这个版本的数据库在安装Visual Studio 2005时默认是一同安装的。
在上面的“添加连接”窗口,我们分别填写如下信息:
在上面我们连接的是本机上的数据库,所使用的数据库帐号是sa,访问的数据库是AspNetStudy,创建这个数据的SQL脚本如下:
01.IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'AspNetStudy')
02. DROP DATABASE [AspNetStudy]
03.GO
04.CREATE DATABASE [AspNetStudy] ON (NAME = N'AspNetStudy_Data', FILENAME = N'C:/Program Files/Microsoft SQL Server/MSSQL/data/AspNetStudy_Data.MDF' , SIZE = 1, FILEGROWTH = 10%) LOG ON (NAME = N'AspNetStudy_Log', FILENAME = N'C:/Program Files/Microsoft SQL Server/MSSQL/data/AspNetStudy_Log.LDF' , SIZE = 1, FILEGROWTH = 10%)
05. COLLATE Chinese_PRC_CI_AS
06.GO
07.use [AspNetStudy]
08.GO
09.if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[UserInfo]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
10.drop table [dbo].[UserInfo]
11.GO
12.CREATE TABLE [dbo].[UserInfo] (
13. [UserID] [int] IDENTITY (1, 1) NOT NULL ,
14. [UserName] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
15. [RealName] [nvarchar] (8) COLLATE Chinese_PRC_CI_AS NOT NULL ,
16. [Age] [tinyint] NOT NULL ,
17. [Sex] [bit] NOT NULL ,
18. [Mobile] [char] (11) COLLATE Chinese_PRC_CI_AS NULL ,
19. [Phone] [char] (11) COLLATE Chinese_PRC_CI_AS NULL ,
20. [Email] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL
21.) ON [PRIMARY]
22.GO
23. CREATE UNIQUE INDEX [IX_UserName] ON [dbo].[UserInfo]([UserName]) WITH IGNORE_DUP_KEY ON [PRIMARY]
24.GO
25.insert into UserInfo([UserName],[RealName],[Age],[Mobile],[Phone],[Email],[Sex])values('zhangfei','张飞',36,'13455663420','03517890360','zhangfei@msn.com',1);
26.insert into UserInfo([UserName],[RealName],[Age],[Mobile],[Phone],[Email],[Sex])values('guanyu','关羽',38,'13455663421','03517890361','guanyu@163.com',1);
27.insert into UserInfo([UserName],[RealName],[Age],[Mobile],[Phone],[Email],[Sex])values('liubei','刘备',42,'13455663422','03517890362','liubei@163.net',1);
28.insert into UserInfo([UserName],[RealName],[Age],[Mobile],[Phone],[Email],[Sex])values('zhougong','周公',29,'13455663423','03517890363','zhoufoxcn@tom.com',1);
29.insert into UserInfo([UserName],[RealName],[Age],[Mobile],[Phone],[Email],[Sex])values('zhaoyun','赵云',32,'13455663424','03517890364','zhaoyun@sohu.com',1);
30.insert into UserInfo([UserName],[RealName],[Age],[Mobile],[Phone],[Email],[Sex])values('huanggai','黄盖',50,'13455663425','03517890365','huanggai@live.com',1);
31.insert into UserInfo([UserName],[RealName],[Age],[Mobile],[Phone],[Email],[Sex])values('zhugeliang','诸葛亮',27,'13455663426','03517890366','zhugeliang@hotmail.com',1);
32.insert into UserInfo([UserName],[RealName],[Age],[Mobile],[Phone],[Email],[Sex])values('jiangwei','姜维',22,'13455663427','03517890367','jiangwei@netease.com',1);
33.insert into UserInfo([UserName],[RealName],[Age],[Mobile],[Phone],[Email],[Sex])values('caocao','曹操',48,'13455663428','03517890368','caocao@qq.com',1);
34.insert into UserInfo([UserName],[RealName],[Age],[Mobile],[Phone],[Email],[Sex])values('guojia','郭嘉',32,'13455663429','03517890369','guojia@21cn.com',1);
35.insert into UserInfo([UserName],[RealName],[Age],[Mobile],[Phone],[Email],[Sex])values('sunquan','孙权',33,'13455663430','03517890370','sunquan@gmail.com',1);
36.insert into UserInfo([UserName],[RealName],[Age],[Mobile],[Phone],[Email],[Sex])values('diaochan','貂禅',20,'13455663431','03517890371','diaochan@sina.com.cn',0);
37.insert into UserInfo([UserName],[RealName],[Age],[Mobile],[Phone],[Email],[Sex])values('yangyuhuan','杨玉环',24,'13455663432','03517890372','yangyuhuang@chinaren.com',0);
38.insert into UserInfo([UserName],[RealName],[Age],[Mobile],[Phone],[Email],[Sex])values('wangzhaojun','王昭君',26,'13455663433','03517890373','wangzhaojun@yahoo.com.cn',0);
39.go
我们可以点击一下“测试连接”按钮,如果弹出连接成功的提示消息就表示这个数据库连接是可用的。点击“确定”按钮,回到“配置数据源”界面,这时候点击连接字符串旁边的”+”按钮就可以看到数据库的连接字符串信息,如下图所示:
把这个字符串拷贝到我们需要实例化Connection对象的地方,可以作为构造函数的参数实例化一个SqlConnection对象。
由于这个例子前后台代码都比较简单,所以在Visual Studio 2005建立的单页模式网页(代码和页面都在一个页面里),下面是代码:
01.<%@ Page Language="C#" %>
02.<%@ Import Namespace="System.Data.SqlClient" %>
03.<%@ Import Namespace="System.Data" %>
04.<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "" >
18.<head runat="server">
19. <title>无标题页</title>
20.</head>
21.<body>
22. <form id="form1" runat="server">
23. <div>
24. </div>
25. </form>
26.</body>
27.</html>
以下是运行效果:
可见实例化一个Connection对象的时候,被实例化的Connection对象是关闭的,我们需要Open这个Connection对象,执行完毕相关操作之后再关闭这个Connection对象。