asp.net学习之:ADO.NET Managed Provider
- 两种受管理提供者
- 受管理连接
- 受管理命令
- 数据读取器
- 带存储过程的受管理命令
- 数据适配器
- 表与列的恶映射
Managed Provider是ADO.NET在应用和数据源之间的桥梁,Managed Provider包括四个部分:
- 连接:Connection
- 命令:
Command:是在数据库中要执行的sql语句
- DataReader:
是单向,只读的数据流,由数据库传送到客户
- DataAdapter:
用于表示一组命令和连接,可以用来从数据库中查找数据
并生成相应的数据集
3.1两种受管理提供者
一个是sql受管理者,一个是OLEDB受管理者,这个用于本地OLEDB和COM的协作
3.2受管理连接
例如:sqlConnection
String conStr = "server=localhost;database=Northwind;uid=sa;pwd=;"; SqlConnection myConnection = new SqlConnection(conStr); myConnection.Open(); //do something myConnection.Close();
3.3受管理命令
受管理命令是在数据库中药执行的语句,命令可以使简单的sql语句,或者是带有参数的复杂语句.一旦建立了连接,
就可以查找,更新,插入数据了,为了达到这个目的,一种方法是使用受管理命令,下面的代码先执行一个sqlCommand对象,并以SqlDataReader返回
String connStr="server=localhost;Integrated Security=true;Initial Catalog=nowaywolf"; SqlConnection myConnection = new SqlConnection(connStr); SqlCommand myCommand = new SqlCommand("select * from 学生", myConnection); myConnection.Open(); SqlDataReader myDataReader = myCommand.ExecuteReader(); myDataGrid.DataSource = myDataReader; myDataGrid.DataBind(); myConnection.Close();
3.4数据读取器
DataReader提供了源自数据库的单向,只读的数据流。如果结果集中的记录比较多,一次导入会占据很大内存。或者需要 利用返回的数据记录进行循处理,则使用DataReader比较方便,DataReader流一次只处理一个记录,而不会将结果集中的所有 记录同时返回。DataReader提供了一个Read()方法,可以对结果集进行逐条处理
String connStr="server=localhost;Integrated Security=true;Initial Catalog=nowaywolf"; SqlConnection myConnection = new SqlConnection(connStr); SqlCommand myCommand = new SqlCommand("select * from 学生", myConnection); myConnection.Open(); SqlDataReader myDataReader = myCommand.ExecuteReader(); DataTable myTable = new DataTable(); DataRow myRow=null; myTable.Columns.Add("学号",Type.GetType("System.String")); myTable.Columns.Add("姓名",Type.GetType("System.String")); myTable.Columns.Add("birth", Type.GetType("System.String")); while (myDataReader.Read()) { if (myDataReader["birth"].ToString()=="1") { myRow = myTable.NewRow(); myRow["学号"] = myDataReader["学号"].ToString(); myRow["姓名"] = myDataReader["姓名"].ToString(); myRow["birth"] = myDataReader["birth"].ToString(); myTable.Rows.Add(myRow); } } myDataGrid2.DataSource = myTable; myDataGrid2.DataBind(); myConnection.Close();
3.5带存储过程的受管理命令
SqlParameter myParameter; String connStr = "server=localhost;Integrated Security=true;Initial Catalog=nowaywolf"; SqlConnection myConnection = new SqlConnection(connStr); SqlCommand myCommand = new SqlCommand("GetStudentName", myConnection); myCommand.CommandType = CommandType.StoredProcedure; myParameter = myCommand.Parameters.Add(new SqlParameter("@姓名", SqlDbType.VarChar, 50)); myParameter.Direction = ParameterDirection.Input; myParameter.Value = "wangdi"; myConnection.Open(); SqlDataReader myDataReader = myCommand.ExecuteReader(); myDataGrid.DataSource = myDataReader; myDataGrid.DataBind(); myConnection.Close();
3.6数据适配器
DataSet是一组DataTable对象集。利用DataSet中的DataTable可以管理WEB表单中的一个或多个控件,而DataAdapter 就相当于DataSet与数据库之间的桥梁。 DataAdapter包括一个TableMapping,一个Command集,一个Exception以及四个命令方法。DataAdapter的主要功能就是 从数据库中查询信息,并将结果放进DataSet中的DataTable中,为此DataAdapter需要两组信息,即: 选择命令和选择命令 DataAdapter的构造函数不仅能够以文本形式设置命令或连接值,还可以将受管理命令对象作为参数, 以文本设置命令值: String connStr = "server=localhost;Integrated Security=true;Initial Catalog=nowaywolf"; SqlDataAdapter myAdapter; DataSet myDataSet = new DataSet(); myAdapter = new SqlDataAdapter("select * from 学生", connStr); myAdapter.Fill(myDataSet, "Student"); myDataGrid.DataSource = myDataSet.Tables["Student"].DefaultView; myDataGrid.DataBind(); 以命令对象作为参数: String connStr = "server=localhost;Integrated Security=true;Initial Catalog=nowaywolf"; SqlDataAdapter myAdapter; SqlCommand myCommand; DataSet myDataSet = new DataSet(); myCommand=new Command("select * from 学生",connStr); myAdapter = new SqlDataAdapter(myCommand); myAdapter.Fill(myDataSet, "Student"); myDataGrid.DataSource = myDataSet.Tables["Student"].DefaultView; myDataGrid.DataBind();
3.6.1 DataAdapter.Fill()方法
DataAdapter.Fill()方法就像一个开关,在调用Fill()方法之前,DataAdapter处于空闲,调用这个方法后,它将建立与 数据库的连接,并执行相应的sql语句,将结果放入DataSet中,而DataSet将由Fill()的参数指定。 如:DataAdapter.Fill(DataSet),则将创建一个新的DataTable 对象。或者:DataAdapter.Fill(DataSet,TableName) String connStr = "server=localhost;Integrated Security=true;Initial Catalog=nowaywolf"; SqlDataAdapter myAdapter; DataSet myDataSet2 = new DataSet(); myDataSet2.Tables.Add(new DataTable("Student2")); myDataSet2.Tables["Student2"].Columns.Add("学号", Type.GetType("System.String")); myDataSet2.Tables["Student2"].Columns.Add("姓名", Type.GetType("System.String")); myDataSet2.Tables["Student2"].Columns.Add("birth", Type.GetType("System.String")); myAdapter = new SqlDataAdapter("select * from 学生", connStr); myAdapter.Fill(myDataSet2,"Student2"); myDataGrid.DataSource = myDataSet2.Tables["Student2"]; myDataGrid.DataBind(); 还可以用来更新数据: String connStr = "server=localhost;Integrated Security=true;Initial Catalog=nowaywolf"; SqlDataAdapter myAdapter; DataSet myDataSet2 = new DataSet(); myDataSet2.Tables.Add(new DataTable("Student2")); myDataSet2.Tables["Student2"].Columns.Add("学号", Type.GetType("System.String")); myDataSet2.Tables["Student2"].Columns.Add("姓名", Type.GetType("System.String")); myDataSet2.Tables["Student2"].Columns.Add("birth", Type.GetType("System.String")); myAdapter = new SqlDataAdapter("GetStudentName", connStr); myAdapter.SelectCommand.CommandType = CommandType.StoredProcedure; myAdapter.SelectCommand.Parameters.Add("@姓名", SqlDbType.VarChar, 50); myAdapter.SelectCommand.Parameters["@姓名"].Value = "wangdi"; myAdapter.Fill(myDataSet2,"Student2"); myAdapter.SelectCommand.Parameters["@姓名"].Value = "wangdi9"; myAdapter.Fill(myDataSet2, "Student2"); myDataGrid.DataSource = myDataSet2.Tables["Student2"]; myDataGrid.DataBind(); 或者向dataSet中增加表: myAdapter.SelectCommand.Parameters["@姓名"].Value = "wangdi9"; myAdapter.Fill(myDataSet2, "Student"); otherDataGrid.DataSource = myDataSet2.Tables["Student"]; otherDataGrid.DataBind();
3.7 表与列的映射