ADO.NET Managed Provider

    技术2022-05-11  112

    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 表与列的映射


    最新回复(0)