编码实现>微软数据访问技术ADO.NET
ADO.NET用于开发分布式应用系统,让应用程序离线处理数据,在数据库以完全断开的方式下。
编码实现>微软数据访问技术ADO.NET>System.Data命名空间>连接类型
用来连接数据库,直接查询和修改数据库数据。
Connection:连接对象,建立与物理数据库的连接。
Transaction:事务对象,与事务处理相关的类。
DataAdapter:数据适配器对象,是连接类型与非连接类型之间的媒介,可当做此两者的桥梁。
Command:数据命令对象,用来向数据库发送查询,更新,删除,修改操作的SQL语句。
Parameter:参数对象,为Command对象中的SQL语句提供参数。
DataReader:数据读取器对象,提供只读前向的游标,用于快速读取数据。
编码实现>微软数据访问技术ADO.NET>System.Data命名空间>断开连接类型
提供与数据库具有相似特性的数据缓冲,并且可以在该缓冲区进行增,删,改的数据操作,这些操作都只在内存中进行,需要通过连接部分的类与数据库交互。
DataSet:可将DataSet看成存放在内存的一小型数据库。DataSet中包含数据表结合,数据表,数据列,数据行,试图,约束,关系。
DataTable:类似数据库中的表,提供二维数据存储。
DataColumn:类似于数据库中的字段列。
DataRow,DataView,Constraint,DataRelation, DataTableCollection.
编码实现>微软数据访问技术ADO.NET>比较DataSet和DataReader
用DataSet:多个表之间导航;使用来自多个数据源的数据;需要在表中来回定位;需要与远程机器交换数据;缓存排序搜索筛选数据。
用DataReader:只需显示数据,而不经常更改;数据不需缓存,每次刷新都要从数据库中获取新数据;结果集太大,占用太多内存。
编码实现>微软数据访问技术ADO.NET>连接数据库
SqlConnection类
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace SqlConnectionDemo1
{
class Program
{
static void Main(string[] args)
{
string ConnectionString="Data Source=ding;Initial Catalog=Northwind;User ID=sa";
SqlConnection conn = new SqlConnection(ConnectionString);
try
{
conn.Open();
if (conn.State == ConnectionState.Open)
{
Console.WriteLine("连接己经打开");
}
;
}
catch (SqlException ex)
{
Console.WriteLine("出现连接错误:{0}", ex.Message);
}
}
}
}
使用SqlConnectionStringBuilder构建连接字符串
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace Demo1
{
class Program
{
static void Main(string[] args)
{
SqlConnectionStringBuilder connBuilder = new SqlConnectionStringBuilder();
//DataSource表示数据源位置,可以是IP地址,也可以指定一个DNS名称
connBuilder.DataSource = ".";
//InitialCataLog指定需要连接的数据库的名称。
connBuilder.InitialCatalog = "Northwind";
//IntergrateSecurity表示是否使用整合身份验证进行登录数据库
connBuilder.IntegratedSecurity = false;
//不使用整合windows身份验证时指定用户ID和密码
connBuilder.UserID = "sa";
connBuilder.Password = "";
//使用SqlConnectionStringBuilder.ToString()方法将会输出连接字符串
using (SqlConnection conn = new SqlConnection(connBuilder.ToString()))
{
try
{
conn.Open();
conn.Dispose();
conn.Open();
if (conn.State == ConnectionState.Open)
{
Console.WriteLine("连接己经打开");
Console.WriteLine("当前连接字符串为:" + conn.ConnectionString);
}
}
catch (Exception ex)
{
if (conn.State != ConnectionState.Open)
{
Console.WriteLine("连接失败");
Console.WriteLine("错误的信息是:{0}", ex.Message);
}
}
}
Console.ReadLine();
}
}
}
关闭和释放SQL Server连接
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace Demo1
{
class Program
{
static void Main(string[] args)
{
SqlConnectionStringBuilder connBuilder = new SqlConnectionStringBuilder();
//DataSource表示数据源位置,可以是IP地址,也可以指定一个DNS名称
connBuilder.DataSource = ".";
//InitialCataLog指定需要连接的数据库的名称。
connBuilder.InitialCatalog = "Northwind";
//IntergrateSecurity表示是否使用整合身份验证进行登录数据库
connBuilder.IntegratedSecurity = false;
//不使用整合windows身份验证时指定用户ID和密码
connBuilder.UserID = "sa";
connBuilder.Password = "";
//使用SqlConnectionStringBuilder.ToString()方法将会输出连接字符串
SqlConnection conn = new SqlConnection(connBuilder.ToString());
try
{
conn.Open();
conn.Dispose();
conn.Open();
if (conn.State == ConnectionState.Open)
{
Console.WriteLine("连接己经打开");
Console.WriteLine("当前连接字符串为:" + conn.ConnectionString);
}
}
catch (Exception ex)
{
if (conn.State != ConnectionState.Open)
{
Console.WriteLine("连接失败");
Console.WriteLine("错误的信息是:{0}", ex.Message);
}
}
finally
{
//关闭一个连接,还可以通过conn.Open方法进行重新打开。
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
//关闭并释放连接,不可以再次直接用conn.Open主法打开,必须再次重新初始化连接再进行打开。
if (conn.State == ConnectionState.Open)
{
conn.Dispose();
}
}
Console.ReadLine();
}
}
}
创建到SQL Server2005 Express的连接
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace ConnSqlExpress
{
class Program
{
static void Main(string[] args)
{
//注意示例这符串的使用
const string ConnectionStr=@"Data Source=.\SQLExpress;AttachDbFilename=|DataDirectory|\Northwnd.mdf;Integrated Security=True;user Instance=True;";
using (SqlConnection conn = new SqlConnection(ConnectionStr))
{
try
{
conn.Open();
if (conn.State == ConnectionState.Open)
{
Console.WriteLine("己经成功绑定到Sql Express!");
}
}
catch (Exception ex)
{
Console.WriteLine("连接失败,错误信息为:{0}", ex.Message);
}
}
Console.ReadLine();
}
}
}
其中,user Instance是指临时绑定,还是永久绑定。如果永久绑定,再次调用字符串的连接对象的Open方法时,会抛出一个异常,提示已绑定此数据库文件。
使用连接池
连接池就像图书馆,图书馆内有7本书,被7个人借了,当第8人想借书,必须等人归还书籍。
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace SqlConnectionDemo1
{
class Program
{
static void Main(string[] args)
{
string ConnectionString="Data Source=ding;Initial Catalog=Northwind;User ID=sa";
SqlConnection conn = new SqlConnection(ConnectionString);
try
{
conn.Open();
if (conn.State == ConnectionState.Open)
{
Console.WriteLine("连接己经打开");
}
//清除指定连接的连接池
SqlConnection.ClearPool(conn);
// 清除所有连接池
SqlConnection.ClearAllPools();
}
catch (SqlException ex)
{
Console.WriteLine("出现连接错误:{0}", ex.Message);
}
}
}
}
如果想强制关闭连接池,在连接字符串中添加"pool=false",如
"Data Source=ding;Initial Catalog=Northwind;User ID=sa;pooling=false"
SqlConnection提供了两个静态方法:ClearPool和ClearAllPool,其作用代码已给出。