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 表与列的映射
本文介绍了ASP.NET中的ADO.NET组件,详细讲解了受管理提供者、连接、命令、数据读取器及数据适配器等核心概念,并通过实例演示如何操作数据库。
1万+

被折叠的 条评论
为什么被折叠?



