1.概念
定义:ADO.NET的名称起源于ADO(ActiveX Data Objects),是一个COM组件库,用于在以往的Microsoft技术中访问数据。之所以使用ADO.NET名称,是因为Microsoft希望表明,这是在NET编程环境中优先使用的数据访问接口。ADO
.NET3.0 中用于存取和管理资料的两个主要元件是 .NET Framework 资料提供者和 DataSet。
对象:
2.System.Data命名空间一、接连(Connection ):和数据库交互,必须连接它。连接帮助指明数据库服务器(server=)、用户名(; uid=)、密码(; pwd=)、数据库名字(; database=)和连接数据库所需要的其它参数(; pooling=false)。Connection对象会被Command对象使用,这样就能够知道是在哪个数据源上面执行命令。与数据库交互的过程意味着必须指明想要执行的操作。这是依靠Command对象执行的。开发人员使用Command对象来发送SQL语句给数据库。Command对象使用Connection对象来指出与哪个数据源进行连接。开发人员能够单独使用Command对象来直接执行命令,或者将一个Command对象的引用传递给DataAdapter或者DataReader,它保存了一组能够操作下面描述的一组数据的命令。注:就是一个连接缓存池,为true则打开,那么你每次用完的连接都会自动进入缓存池自动缓存,下次就算你new一个新的连接,也不会创建新连接,而是从缓存池中利用已经存在的连接,这也就是有些人说我明明关闭了连接,可是数据库里还显示连接着,关闭不掉的原因。不过这却可以加快程序连接数据库的速度,是有好处的。Connections可以通过调用Open方法被显式打开,或者使用DataAdapter的时候被隐式打开。string connectionString="server=" + server + ";uid=" + uid + ";pwd=" + pwd + ";database=" + database + ";pooling=false";using (SqlConnection connection = new SqlConnection(connectionString)){connection.Open();}二、语句(Command):成功与数据建立连接后,就可以用Command对象来执行查询、修改、插入、删除等命令;Command对象常用的方法有ExecuteReader(执行查询)方法、ExecuteNonQuery(执行非查询)方法;插入数据可用ExecuteNonQuery()方法来执行插入命令。注:SqlCommand用于SQL SERVER数据库;OleDbCommand是一个要对Access数据库;OdbcConnection用于MYSQL数据库数据库;OracleCommand用于Oracle数据库。三、数据读(DataReader):许多数据操作要求开发人员只是读取一串数据。DataReader对象允许开发人员获得从Command对象的SELECT语句得到的结果。考虑性能的因素,从DataReader返回的数据都是快速的且只是“向前”的数据流。这意味着开发人员只能按照一定的顺序从数据流中取出数据。这对于速度来说是有好处的,但是如果开发人员需要操作数据,更好的办法是使用DataSet。DataReader必须保持和数据库的连接。四、数据集(DataSet):DataSet总是断开连接的,代表缓存数据与数据库结构类似例如表,列,关系,和约束。DataSet对象不直接和数据库交互,或者其他数据源。这使得开发人员无论使用什么数据源都可以始终使用一种一致的编程模型,数据从数据库,XML、文件来,或者从用户输入来都可以放进DatSet对象。然后,当更改DataSet就可以被跟踪和验证之前更新数据源。DataSet对象的GetChanges方法实际上创建了第二个仅包含更改数据的DataSet。然后由DataAdapter(或其他对象)使用这个DataSet来更新原始数据源。五、数据适配器(DataAdapter):DataAdapter对象作为DataSet和数据源之间的桥梁。当使用Microsoft SQL Server数据库时,利用特定提供程序SqlDataAdapter(和他相关的SqlCommand和SqlConnection)可以提高整体的性能。DataAdapter对象使用命令在DataSet完成变动后更新数据源。使用DataAdapter的Fill方法调用SELECT命令;使用Update方法对于每个更改行调用INSERT、UPDATE或者DELETE命令。
3.数据库操作一、System.Data表示内存数据的类。由构成ADO.NET结构的类组成,该结构是托管应用程序的主要数据访问方法。有效的管理来自多个数据源的数据,这些类中最重要的是DataSet类。二、System.Data.SqlClient提供程序允许连接到SQL Server 2008、执行命令并读取结果。三、System.Data.SqlTypes为SQL Server内本机数据类型提供类。
一、读取数据库1.使用SqlCommand.ExecuteReader()赋值给SqlDataReader只读单向数据的快速传递
string connectionString = "Server = .;" + "Database = Test;" + "User ID = Test;" +"Password = abc123;";SqlConnection con = new SqlConnection(connectionString);con.Open();sqlstr="select * from 学生信息";SqlCommand cmd =new SqlCommand(sqlstr,con);SqlDataReader dr=cmd.ExecuteReader();while (dr.Read()){Console.WriteLine(String.Format("{0}, {1}", dr[0], dr[1]));2.使用SqlCommand.___()等语句实现读取。}dr.Close();con.Close();
string connectionString = "Server = .;" + "Database = Test;" + "User ID = Test;" +"Password = abc123;";SqlConnection con = new SqlConnection(connectionString);conn.Open();SqlCommand cmd =new SqlCommand();cmd.CommandType=CommandType.Text; //查询类型cmd.CommandText="select * from 学生信息"; //查询语句cmd.Connection=con; //查询连接
二、数据集
1.创建数据集(DataSet)
应用程序与数据库交互过程中,数据库中的数据被读取后,在服务器内存里面创建了一个原数据库的“副本”(称为数据集)。任何针对数据库的添加、删除、和修改等操作都是先对内存中和的数据库“副本”进行操作,然后再更新到数据库中,这样大大提高了数据交互的效率。DataSet是一种容器,可以从数据适配器执行的SQL语句或者存储过程所填充,不直接绑定到数据源,可以缓存来自多个数据源数据。
public DataSet ds=new DataSet();
2.填充数据集
- 使用SqlCommand把语句赋值给SqlDataAdapter
public DataSet ds=new DataSet();
string connectionString = "Server = .;" + "Database = Test;" + "User ID = Test;" +"Password = abc123;";SqlConnection con = new SqlConnection(connectionString);conn.Open();SqlCommand cmd =new SqlCommand(con);cmd.CommandType=CommandType.Text; //查询类型cmd.CommandText="select * from 学生信息"; //查询语句cmd.Connection=con; //查询连接SqlDataAdapter da=new SqlDataAdapter(cmd);da.Fill(ds,"student");
- 使用SQL语句或存储过程直接赋值给SqlDataAdapter
public DataSet ds=new DataSet();
string connectionString = "Server = .;" + "Database = Test;" + "User ID = Test;" +"Password = abc123;";SqlConnection con = new SqlConnection(connectionString);conn.Open();sqlstr="select * from 学生信息";SqlDataAdapter da=new SqlDataAdapter(sqlstr,con);da.Fill(ds,"student");ds.Tables[0].Rows[0][0].ToString();三、增、删、改数据表
1.使用SqlCommand.ExecuteNonQuery()实现增加数据
string connectionString = "Server = .;" + "Database = Test;" + "User ID = Test;" +"Password = abc123;";SqlConnection con = new SqlConnection(connectionString);conn.Open();
string insertstr="insert 学生信息 values("+" '"+test.Text+"' )";
SqlCommand cmd =new SqlCommand(insertstr,con);
if(com.ExecuteNonQuery()>0){Message.Show("插入成功");}2.使用SqlCommand.Parameters.Add()创建参数跟新表
string connectionString = "Server = .;" + "Database = Test;" + "User ID = Test;" +"Password = abc123;";SqlConnection con = new SqlConnection(connectionString);con.Open();SqlCommand cmd =new SqlCommand();
cmd.Connection=con;
cmd.Parameters.Add("@学号",SqlDbType.Nchar,50);cmd.CommandText="update 学生信息 set 学号=@学号";
cmd.Parameters[0].Value=test.Text;if(com.ExecuteNonQuery()>0){Message.Show("更新成功");}3.使用存储过程删除数据(cmd.CommandType=CommandType.StoredProcedure)
if (exists (select * from sys.objects where name = 'proc_delete_student'))drop proc proc_delete_studentgocreate proc proc_get_student@学号 Nvarchar(50)asdelete student where 学号=@学号;go
string connectionString = "Server = .;" + "Database = Test;" + "User ID = Test;" +"Password = abc123;";SqlConnection con = new SqlConnection(connectionString);con.Open();
SqlCommand cmd =new SqlCommand();cmd.Connection=con;cmd.CommandType=CommandType.StoredProcedurecmd.CommandText="proc_delete_student";cmd.Parameters.Add("@学号",SqlDbType.Nchar,50);cmd.Parameters[0].Value=test.Text;
if(com.ExecuteNonQuery()>0){Message.Show("删除成功");}