- ADO.NET结构:ADO.NET建立在几个核心类之上,这些类可以分为两组
- 包含和管理数据的类:DataSet DataTable DataRow DataRelation...
- 链接数据源的类:Connection Command DataReader...
- 数据提供器与DataSet之间的关系
- ADO.NET命名空间
- 数据提供器类
- 数据库访问方式
- 直接数据库访问:一种最容易的访问数据库的方式。使用直接数据库访问可以创建并执行SQL命令。使用直接访问数据库时,并不需要在内存中保存信息副本。
- 简单的数据查询步骤(ASP.NET页面)
- 创建Connection Command和DataReader对象
- 使用DataReader对象从数据库获得信息,并显示在Web表单的控件里
- 关闭连接
- 发送页面到客户端。此时,在页面上看到的信息和数据库中的信息不存在任何联系,且所有的ADO.NET对象都被释放。
- 插入和更新数据步骤
- 创建Connection和Command对象
- 执行SQL命令
- 创建连接
//声明一个Connection对象 //为该对象的属性ConnectionString设定一个值 //SQL Server .ver
//DataSource=数据库服务器
//Initial Catalog=要访问的数据库
//User ID=登录名;Password=密码;
SqlConnection connection=new SqlConnection(); connection.ConnectionString="DataSource=zzl;Initial Catalog=BookSample;User ID=sa;PassWord=123"; - Select命令
(1)创建一个Command对象,指定SQL命令,并设置可以利用的数据库连接 SqlCommand myCommand=new SqlCommand(); myCommand.Connection=connection; myCommand.CommandText="Select * from DataTable"; (2)在创建Command对象时,直接指定SQL命令和数据库连接 SqlCommand myCommad=new SqlCommand("Select * from DataTable",connection);
- DataReader:如果利用Command对象执行的命令时有传回数据的Select语句,此时Command对象会自动产生一个DataReader对象,可以将数据源的数据抽取后显示给使用者。可以在执行Execute方法时传给一个DataReader类型的变量来接收。一次仅读取一条数据,且只能只读。
-
1 using cs002; 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7 using System.Data.SqlClient; 8 namespace cs002 9 { 10 public class program 11 { 12 public static SqlConnection CreateConnection() 13 { 14 string ConnectionString = "Data Source=arkiwang;initial Catalog=scott;User ID=sa;PassWord=123"; 15 SqlConnection sqlConnection = new SqlConnection(ConnectionString); 16 return sqlConnection; 17 } 18 public static void Main(string[] args) 19 { 20 string name = Console.ReadLine(); 21 string selectSQL = "select * from students where StuName='" + name + "'"; 22 SqlConnection sqlConnection = CreateConnection(); 23 SqlCommand cmd = new SqlCommand(selectSQL, sqlConnection); 24 SqlDataReader reader; 25 26 try 27 { 28 sqlConnection.Open(); 29 reader = cmd.ExecuteReader(); 30 reader.Read(); 31 Console.WriteLine("学生{0}的基本信息:", name); 32 Console.WriteLine("姓名:{0}", reader["StuName"]); 33 Console.WriteLine("电话:{0}", reader["Phone"]); 34 Console.WriteLine("地址:{0}", reader["Address"]); 35 Console.WriteLine("城市:{0}", reader["City"]); 36 Console.WriteLine("国家:{0}", reader["State"]); 37 38 } 39 catch(Exception err) 40 { 41 Console.WriteLine("连接数据库错误:{0}", err.Message.ToString()); 42 } 43 finally 44 { 45 sqlConnection.Close(); 46 //Console.WriteLine("前数据库连接:{0}", SqlConnection.State.ToString()); 47 48 } 49 Console.ReadLine(); 50 } 51 } 52 }
- 简单的数据查询步骤(ASP.NET页面)
- 直接数据库访问:一种最容易的访问数据库的方式。使用直接数据库访问可以创建并执行SQL命令。使用直接访问数据库时,并不需要在内存中保存信息副本。
- 不链接的数据库访问:会在内存中的DataSet对象中保存数据的副本,在数据库断开链接后仍然能操作这些数据。不链接的数据库访问方式并不是意味着不需要连接到数据库,而连接数据库后,把数据从数据库中取出并放入DataSet,然后断开数据库连接,这时虽然断开连接,但仍可以对这些数据进行操作。不过因为连接已经断开,将不会同步到数据库影响其状态。
- DataAdapter:数据适配器DataAdapter表示一组数据命令和一个数据库连接,它们用于填充DataSet和更新数据源。常与DataSet一起配合使用,作为DataSet和数据源之间的桥接器以便检索和保存数据。
- DataSet:从数据库完成数据抽取后,DataSet就是数据的存放地,它是各种数据源中的数据在计算机内存中映射成的缓存。
特性
- 独立性:DataSet独立于各种数据源
- 离线(断开)性:DataSet既可以以离线方式也可以以实时连接来操作数据库中的数据
- DataSet对象是一个可以用XML形式表示的数据视图,是一种数据关系视图
- 以不连接的方式获取数据:DataAdapter对象提供了一个名为Fill的方法,使用该方法可以把从数据库中获取的数据填充到DataSet对象中。
1 /*Adapter为DataAdapter对象的一个实例,调用方法Fill把从数据库中获得的数据填充到DataSet对象的实例dsPubs中的一个名为Authors的表中。*/ 2 Adapter.Fill(dsPubs,"Authors");
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.Data.SqlClient; 7 using System.Data; 8 namespace cs001 9 { 10 public class program 11 { 12 private static DataSet dsPubs = new DataSet(); 13 public static SqlConnection CreateConnection() 14 { 15 string ConnectionString = "Data Source=arkiwang;initial Catalog=scott;User ID=sa;PassWord=123"; 16 SqlConnection sqlConnection = new SqlConnection(ConnectionString); 17 return sqlConnection; 18 } 19 public static void Main(string[] args) 20 { 21 string name = Console.ReadLine(); 22 string selectSQL = "select * from students where StuName='" + name + "'"; 23 SqlConnection sqlConnection = CreateConnection(); 24 SqlCommand cmd = new SqlCommand(selectSQL, sqlConnection); 25 // SqlDataReader reader; 26 SqlDataAdapter adapter = new SqlDataAdapter(cmd); 27 28 try 29 { 30 sqlConnection.Open(); 31 // reader = cmd.ExecuteReader(); 32 adapter.Fill(dsPubs, "Students"); 33 //reader.Read(); 34 sqlConnection.Close(); 35 //Console.WriteLine("前数据库连接:{0}", SqlConnection.State.ToString()); 36 37 Console.WriteLine("学生{0}的基本信息:", name); 38 Console.WriteLine("学号:{0}",dsPubs.Tables ["Students"].Rows[0]["ID"]); 39 Console.WriteLine("姓名:{0}", dsPubs.Tables[0].Rows[0]["StuName"]); 40 Console.WriteLine("电话:{0}", dsPubs.Tables[0].Rows[0]["Phone"]); 41 Console.WriteLine("地址:{0}", dsPubs.Tables[0].Rows[0]["Address"]); 42 Console.WriteLine("城市:{0}", dsPubs.Tables[0].Rows[0]["City"]); 43 Console.WriteLine("国家:{0}", dsPubs.Tables[0].Rows[0]["State"]); 44 45 } 46 catch (Exception err) 47 { 48 Console.WriteLine("连接数据库错误:{0}", err.Message.ToString()); 49 } 50 finally 51 { 52 //sqlConnection.Close(); 53 //Console.WriteLine("前数据库连接:{0}", SqlConnection.State.ToString()); 54 } 55 Console.ReadLine(); 56 } 57 } 58 }