ADO.NET Managed Provider

 

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值