在线式访问数据库
使用数据读取器DataReader读取数据
DataReader对象是Command对象在调用ExecuteReader方法查询数据库在返回数据记录的同时,将产生一个DataReader对象并指向返回的记录集
DataReader对象可以从数据库得到**只读的 只能向前**的数据流
DataReader常用的属性及方法:
IsDBNULL() 返回布尔值 判断列是否包含NULL值
Read() 返回布尔值 指示是否多行 读到数据返回True 没有读到数据则返回False 将DataReader对象前进到下一行读取,SqlDataReader的默认位置在第一条记录前面,因此必须使用Read来访问任何数据
Close() 关闭DataReader对象
HasRows HasRows属性表示是否返回数据
GetString() 此方法返回字段索引指定字段的值,类型为字符串,索引在括号内
Item 此属性返回字段索引或字段名字对应的字段的值 Item[string] 列名 Item[Int32] 索引
这里添加一个小插曲 **使用.ToString()方法可以把object类型转换为string类型**
典型代码:
SqlCommand cmd = new SqlCommand(sql,con);
SqlDataReader dr = new SqlDataReader();
if(dr.Read()){//如果读到数据
}
优缺点: 节省资源 效率高 但是增加服务器负荷 缺乏灵活性
离线式访问数据库
DataSet(数据集 :真实数据在内存中的复制品) <----DataAdapter(数据适配器 类似于货车) <-----DataBase
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020072515543554.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0NzM2ODU1,size_16,color_FFFFFF,t_70)
DataAdapter对象的方法:
Fill(数据集,表名) 将我们需要的数据fill()到数据集中或者某张表中
Update() 使用Update方法告诉数据库 我在数据集中做了哪些变化 数据库中也要进行相应的变化 **因为Update方法中有CommandBuilder对象 会自动根据数据集中的变化 在数据库中自动的生成相应的增删改查操作**
核心代码:
DataSet ds = new DataSet();//定义并实例化一个数据集DataSet对象
SqlDataAdapter da = new SqlDataAdapter(sql,con);
1) da.Fill(ds); //调用数据设配器DataAdapter的Fill()方法把数据加载到ds中
2)da.Fill(ds,TableName); //调用数据设配器DataAdapter的Fill()方法把数据加载到ds中的TableName表中
**DataAdapter对象如果检测到没有打开数据库 会自动打开 但不会自己关闭**
修改的代码:
DataRow[] dr = ds.Tables[TableName].Select("学号=‘xxx'");
dr[0]["年龄"]=100;
SqlCommandBuilder br = new SqlCommandBuilder(da);//为DataAdapter对象生成一个CommandBuilder对象,以自动为数据库更新生成相应的sql命令
da.Update(ds,TableName);//调用DataAdapter的Update方法更新真实的数据库
添加的代码:
DataRow[] dr = ds.Tables[TableName].NewRow();
dr["学号"] ="xxx";
dr["姓名"]="xxx";
ds.Tables[TableName].Rows.Add(dr);
SqlCommandBuilder br = new SqlCommandBuilder(da);//为DataAdapter对象生成一个CommandBuilder对象,以自动为数据库更新生成相应的sql命令
da.Update(ds,TableName);//调用DataAdapter的Update方法更新真实的数据库
删除的代码:
DataRow[] dr = ds.Tables[TableName].Select("学号=’xxx'");
dr[0].Delete();
SqlCommandBuilder br = new SqlCommandBuilder(da);//为DataAdapter对象生成一个CommandBuilder对象,以自动为数据库更新生成相应的sql命令
da.Update(ds,TableName);//调用DataAdapter的Update方法更新真实的数据库