ADO.Net基础复习(一)
先前的一个SQL基础复习,有点粗枝大叶,不够具体、详细! 复习整理的,有很多属性和方法也没提到,只是说了一下常用的、基础的属性和方法!
一切都归因于老师的教导有方!
注意命名空间的引入:
using System.Data;
using System.Data. OleDb; //用于OLEDB提供器支持的数据库
using System.Data. Odbc; //用于ODBC数据提供器支持的数据库的数据
using System.Data.SqlClient; //用于sql server数据库
五大对象:
Connection对象:建立与数据源的连接
Command对象:检索,插入,删除,修改数据
DataReader对象:只读,只向前的方式检索数据
DataAdapter对象:数据库和数据集交互的桥梁
DataSet对象:看成是驻留在内存中的一个小型数据库
四种典型的连接类
OdbcConnection
OleDbConnection
SqlConnection
下面是以对SQL Server数据库的操作
一、Connection对象:连接数据源
1.创建Connection对象:
string strCon="Data Source="user8\\SQLEXPRESS";Initial Catalog=studentdb";
SqlConnection myConnection=new SqlConnection(strCon);
2.属性:
(1).ConnectionString:指定连接数据库所需的值字符串格式的描述
Data Source=服务名; Initial Catalog=数据库名; User ID=用户名; Password=密码; //Integrated Security=True;
如: //SQL Server验证(注意转义字符:\),混合验证
ConnectionString="Data Source=user8\\SQLEXPRESS;Initial Catalog=studentdb; User ID=sa;Passward=pws;"
//windows验证
ConnectionString="Data Source="user8\\SQLEXPRESS";Initial Catalog=studentdb; Integrated Security=true;"
(2).State:只读属性,表示连接状态
(3).Pooling:当为 true 时,请求新的连接时从池中取出,默认是true
(4).Connect Timeout( Connection Timeout):等待服务器响应的时间(单位:秒). 默认值:15。
(5).Provider:指打开数据库的驱动程序
3.方法:
(1).Open() //根据连接串,打开连接
(2).Close() //关闭连接,释放资源
4.事件:
(1).StateChange:此事件发生在连接的状态发生更改时
(2).InforMessage:此事件发生在从数据源返回信息性消息或警告时
二、Command对象:执行相关命令
1.创建Command对象:
string strSql="";//SQL命令
(1).SqlCommand com=new SqlCommand(strSql,connection);
(2).SqlCommand com=connection.CreateCommand(strSql);
2.属性
(1).Connection:连接对象
(2).CommandText:要执行的SQL命令(SQL语句或存储过程)
(3).CommandType:默认值是Text,执行sql语句;并可设置为StoredProcedure,执行存储过程;TableDirect,指示所包含的是要访问的一个表的名称,从此表中将取出所有的列和行
(4).Parameters:Parameters集合
(5).Transaction:执行命令所在的事务
3.方法
(1).ExecuteNonQuery():返回执行命令受影响的行数,用于增删改操作
(2).ExecuteScalar():返回执行sql语句的第一行第一列的值,用于查询单列值
(3).ExecuteReader ():返回一个DataReader对象[只向前、只读的结果集],用于查询多个数据
4.对于Parameters集合:
(1).属性:
<1>.Count属性:获取集合中参数的数目;
<2>.ParameterName:设置为SQL命令或存储过程中的参数名,如 “@EmployeeID”
<3>.SqlDbType:将该属性设置为参数的数据类型。
设置SqlParameter对象的数据类型的方法有以下两种。
在DbType枚举中选择一个值赋给DbType属性
在SqlDbType枚举中选择一个值赋给SqlDbType属性
<4>.Size:设置该属性以指示参数大小,例如字符串参数中字符的个数。 无需为已知且具有固定大小的数据类型(例如DbType.Int32)指定大小
<5>.Direction:设置该属性以指示该参数是只输入参数、只输出参数、双向参数 还是存储过程的返回值。
该属性可设置为ParameterDirection枚举值之一: ParameterDirection.Input、ParameterDirection.InputOutput、 ParameterDirection.Output或ParameterDirection.ReturnValue。默认方向为 ParameterDirection.Input
<6>.Value:对于只输入参数或双向参数而言,在运行该命令之前需要设置Value属性。
对于只输出参数、双向参数和存储过程的返回值而言,在运行该命令之后可以检索Value属性
(2).方法:
<1>.Add():将参数添加到集合中;
<2>.Clear():从集合中移除所有参数;
<3>.Insert():将参数插入集合中的指定索引位置;
<4>.Remove():从集合中移除所指定的参数;
(3).创建参数对象:
strSQL="select * from CustomersTb where customerid=@customerid";
<1>.第一种方式: cmd.Parameters.add(new SqlParameter("@customerid","ALFKI"));
<2>. 第二种方式 :
SqlParameter myPara=new SqlParameter();
myPara .ParameterName="@customerid";
myPara.value="ALFKI";
cmd.Parameters.Add(myPara);
5.对于ExecuteReader ()方法返回一个DataReader对象
(1).DataReader的创建:sqlDataReader rdr=cmd.ExecuteReader();
(2).属性:
<1>.FieldCount:字段数
<2>.HasRows:是否有数据未读
<3>.IsClosed:判断DataReader对象是否关闭
(3).方法:
<1>.GetValue():获取指定字段的值
<2>.GetOrdinal():获取字段的序号
<3>.Read():判断并读取下一条记录
<4>.Close():关闭对象
还有方法:GetInt32()\GetName()\NextResult()\IsDBNull()
三、Adapter数据适配器对象:数据库和数据集的桥梁(断开环境)
DataAdapter是和数据集(DataSet)一起使用的对象,数据库与数据集之间起桥梁作用;专门为处理脱机数据而设计的。
1.创建DataAdapter对象:
string strConn="Data Source=.;Initial Catalog=northwind;User ID=MyUserid;Password=myPassword;"
string strSql="select * from studentsTb";
(1).用查询串和连接字符串
SqlDataAdapter da=new SqlDataAdapter (strSql,strConn);
该方式会为每个SqlDataAdapter 创建一个新的SqlConnection对象,应适当选择。
用查询串和连接对象 SqlConnection cn=new sqlConnection(strConn);
(2).SqlDataAdapter da=new SqlDataAdapter (strSql,cn);
比较常用的方式
(3).使用SqlCommand对象
SqlCommand cmd=new SqlCommand(strSql,CN);
SqlDataAdapter da=new SqlDataAdapter (cmd);
已存在一个SqlCommand对象时使用.
2.属性:
(1).SelectCommand:在数据源中检索数据的数据命令
(2).InsertCommand:在数据源中插入数据的数据命令
(3).UpdateCommand:在数据源中更新数据的数据命令
(4).DeleteCommand:在数据源中删除数据的数据命令
(5).TableMappings:DataTableMapping对象的集合,决定DataSet中的行与数据源之间的关系
(6).UpdateBatchSize:决定批进程支持,指出在批处理中可执行的命令的数量
3.方法:
(1).Fill()
<1>. Fill(DataSet) :DataSet结果集
<2>. Fill(DataTable): DataTable对象
<3>. Fill(Int32,Int32,params DataTable[]):开始记录索引 ,要填充的数据表的行数, DataTable对象
<4>.Fill(DataSet, Int32,Int32,String) :DataSet结果集,对象 开始记录的索引 ,要填充的数据集的行数 ,表名
(2).Update()
4.对于TableMappings属性的应用
(1).先创建SqlDataAdapter对象
SqlDataAdapter adapter = CreateDataAdapter(conn, age);
DataSet ds = new DataSet();
(2).Mappings的用法
DataTableMapping mapping = adapter.TableMappings.Add("Table", "学生表");
mapping.ColumnMappings.Add("SNO", "学生编号");
mapping.ColumnMappings.Add("SName", "学生姓名");
mapping.ColumnMappings.Add("SDept", "所在院系");
mapping.ColumnMappings.Add("SClass", "所在班级");
mapping.ColumnMappings.Add("SSex", "性别");
mapping.ColumnMappings.Add("SAge", "年龄");
(3).数据填充
adapter.Fill(ds);
(4).dataGridView绑定显示
dataGridView1.DataSource = ds.Tables["学生表"];//使用设置好的映射表名字
dataGridView1.Refresh();
5.Update()方法的应用
(1).数据填充
string strSql="SELECT * FROM STUDENT";
adapter.SelectCommand = new SqlCommand(strSql, conn);
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
adapter.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];
dataGridView1.Refresh();
更新时的代码:
adapter.Update(ds);
MessageBox.Show("更新成功");
6.DataAdapter的事件
(1).Disposed:当调用Dispose释放组件的时候调用。
(2). FillError:在填充操作过程中出现错误时返回。
(3). RowUpdating:在对数据源执行命令前的Update过程中发生,试图进行更新,因此激发该事件。
(4). RowUpdated:在对数据源执行命令后的Update过程中发生,试图进行更新,因此激发该事件。
四、DataSet:数据集
1.DataSet 层次结构中的类:DataTable\DataColumn\DataRow\DataTableCollection\DataCloumnCollection\DataRowCollection\
2.对于DataTable对象允许访问数据集中被访问的Rows集合,有如下方法: Add()\InsertAt()\Find()\Select()\Remove()
对于DataTable对象允许访问数据集中被访问的Columns集合,有如下方法: Add()\InsertAt()\Find()\Select()\Remove()
3.创建DataTable
//创建一个DataTable的一个实例。
DataTable dt = new DataTable("学生表");
//声明列对象
DataColumn column;
column = new DataColumn();
//设置列的数据类型
column.DataType = System.Type.GetType("System.Int32");
column.ColumnName = "学生编号";
column.ReadOnly = true;
column.Unique = true;
//向DataTable添加该列
dt.Columns.Add(column);
//建立一个新行
row = dt.NewRow();
//为新建立的行添加数据
row["学生编号"] = Convert.ToInt32(txtID.Text.ToString());
row["学生姓名"] = txtName.Text;
//为该表添加指定的行
dt.Rows.Add(row);
//绑定数据为DataGridView
dataGridView1.DataSource = dt;
dataGridView1.Refresh();
4.DataTable的Select方法 三个参数:
(1). String:筛选条件
(2).String:排序表达式
(3).RowStateValue:一个值,指示要以什么版本或状态进行筛选。这是一个枚举值。如 :DataViewRowState.CurrentRows。
示例代码:
DataTable dataTable = new DataTable("学生表临时");
dataTable = dt.Clone();
string expression = "学生编号 = " + Convert.ToInt32(txtID.Text.ToString());
//按照条件筛选数据
DataRow[] foundRows = dt.Select(expression);
//遍历查询出来的结果并将其绑定到DataGridView2上。
foreach(DataRow dr in foundRows)
{
DataRow dataRow = dataTable.NewRow();
dataRow[0] = dr[0];
dataRow[1] = dr[1];
dataTable.Rows.Add(dataRow);
}
//绑定数据为DataGridView
dataGridView2.DataSource = dataTable;
dataGridView2.Refresh();
5.DataTable对象的SELECT方法的功能非常强大,但它效率低,windows web窗体都不支持绑定到select方法的返回值,dataView类能弥补select的局限性. DataView属性:
(1).RowFilter:此属性用来指定用来过滤记录的字符串格式的表达式/条件。满足条件的记录将只被包括在视图中。
(2).RowStateFilter:此属性指定此 DataView 返回的数据的版本。
(3).Sort:此属性用来指定将按其排序记录的表达式。表达式包括列名称和排序限定符,其为 ASC 或 DESC,以升序或降序来显示记录。