用过ADO编程的人都非常熟悉,其中的几个主要对象。例如:connect,command,recordset,parameter等。那么到了ADO.Net时代,微软给我们带来了哪些变化呢?我认为关键就是数据适配器Adapter和DataSet。DataSet就好比一个在内存中的数据库,可以在其中自定义表以及表之间的各种关系(比如约束),这些功能以前通常都是由数据提供的。而Adapter和他的名字很相配,他将对DataSet中各个表格的各类操作通过connect与数据源有机的连接起来。从而实现了将数据由数据源读取到内存,断开连接,修改数据,最后连接更新数据源等这些对数据库的操作。有效的提高了对数据源资源的访问。
要使用ADO.Net需要在自己的项目中添加对System.Data的引用。
System.Data名称空间下常用对象有:
DataSet、DataTable、DataRow、DataView、DataColumn
System.Data.OleDb名称空间下常用对象有:
OleDbConnection、OleDbCommand、OleDbParameter、OleDbDataAdapter、OleDbDataReader
System.Data.SqlClient名称空间下常用对象有:
SqlConnection、SqlCommand、SqlParamenter、SqlDataAdapter、SqlDataReader
下面就举一个简单的例子,看是如何连接到SQL数据库,并读取数据的。
System.Data.DataSet ds = new System.Data.DataSet();
System.Data.SqlClient.SqlConnection cnn = new System.Data.SqlClient.SqlConnection();
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
System.Data.SqlClient.SqlAdapter adp = new System.Data.SqlClient.SqlAdapter ();
System.Data.DataTable dt = new System.Data.DataTable();
// 使用Windows身份认证连接字符串
cnn.ConnectString = "integrated security=SSPI;workstation id=.;packet size=4096;persist security info=False;initial catalog=DataBase";
// 使用SQL认证连接字符串
cnn.ConnectString ="workstation id=.;packet size=4096;user id=sa;password=****;persist security info=False;initial catalog=reportdb"
// 检查连接字符串
try
{
cnn.Open();
}catch (Exception ex)
{
// 处理异常
}
finally
{
cnn.Close();
}
// 读取并显示数据
cmd.Connection = cnn;
cmd.CommandText = "select 用户,类型 from [user]";
adp.SelectCommand = cmd;
adp.Fill(ds,"User");
dt = ds.Tables["User"];
foreach(DataRow dr in dt.Rows)
{
Console.WriteLine(dr["用户"].ToString());
Console.WriteLine(dr["类型"].ToString());
}
注意:这里读取并显示数据的代码同我们用ADO的代码有很大的差别,主要原因是以前有很多事情都已经由Adapter帮我们处理了,这里我们只需要告诉Adapter我们使用的SelectCommand是哪一个cmd对象,告诉cmd他要调用的数据库连接是哪一个,以及他的SQL命令是什么,那么要读取数据的时候,只需要使用Adapter的Fill功能,就可以将读取到的结果在DataSet对象中创建一个结果集的表。然后通过DataTable对象dt将结果集引用出来,最后使用foreach循环遍历结果集中的每一行。那么在这个过程中和是连接到数据源何时断开,如何同步等等问题都交给Adapter了。所以代码可以简化很多,从而提高开发效率。