一、思维导图
二、知识点描述
属性
CaseSensitive | 获取或设置一个值,该值指示 DataTable 对象中的字符串比较是否区分大小写。 |
Container | 获取组件的容器。 |
DataSetName | |
DefaultViewManager | 获取 DataSet 所包含的数据的自定义视图,以允许使用自定义的 DataViewManager 进行筛选、搜索和导航。 |
DesignMode | 获取指示组件当前是否处于设计模式的值。 |
EnforceConstraints | 获取或设置一个值,该值指示在尝试执行任何更新操作时是否遵循约束原则。 |
Events | 获取附加到该组件的事件处理程序的列表。 |
ExtendedProperties | 获取与 DataSet 相关的自定义用户信息的集合。 |
HasErrors | 获取一个值,指示在此 DataTable 中的任何 DataSet 对象中是否存在错误。 |
IsInitialized | 获取一个值,该值指示是否已初始化 DataSet。 |
Locale | 获取或设置用于比较表中字符串的区域设置信息。 |
Namespace | 获取或设置 DataSet 的命名空间。 |
Prefix | 获取或设置一个 XML 前缀,该前缀是 DataSet 的命名空间的别名。 |
Relations | 获取用于将表链接起来并允许从父表浏览到子表的关系的集合。 |
RemotingFormat | 为远程处理期间使用的 SerializationFormat 获取或设置 DataSet。 |
SchemaSerializationMode | 获取或设置 SchemaSerializationMode 的 DataSet。 |
Site | 获取或设置 DataSet 的 ISite。 |
Tables | 获取包含在 DataSet 中的表的集合。 |
第一部分:查询
我们都知道DataReader的用法,但是它有一个很大的缺陷,这一方法一般适用于比较庞大的数据的提取,可以将数据一条一条单独提取出来存放在服务器上,此时如果服务器中断而我们正在读取数据,那么将无法读取后面的数据。
那么我们今天就要讲到ADO.Net中DataSet的应用,在数据库不是很大时,可以一次性将所有数据提取出来放在内存中,此时如果服务器中断而我们正在提取数据,不需要担心,因为数据可以继续提取。
DataSet可以存放若干个表,每个表都有若干行。
private void btn_Load_Click(object sender, EventArgs e)
{
SqlConnection sqlConnection = new SqlConnection();
sqlConnection.ConnectionString =
"Server=(local);Database=MEDI;Integrated Security=sspi";
SqlCommand sqlCommand = new SqlCommand();
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandText =
"SELECT * FROM tb_Region;"
+ "SELECT * FROM tb_Hospital;"
+ "SELECT * FROM tb_Department;"
+ "SELECT * FROM tb_DepartmentDoctor;";
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
sqlDataAdapter.SelectCommand = sqlCommand;
DataSet dataSet = new DataSet();
sqlConnection.Open();
sqlDataAdapter.Fill(dataSet);
sqlConnection.Close();
DataTable RegionTable = dataSet.Tables[0];
DataTable HospitalTable = dataSet.Tables[1];
DataTable DepartmentTable = dataSet.Tables[2];
DataTable DepartmentDoctorTable = dataSet.Tables[3];
DataRelation[] dataRelations =
{
new DataRelation
("Region_Hospital"
, RegionTable.Columns["No"]
, HospitalTable.Columns["RegionNo"]
, false)
, new DataRelation
("Hospital_Department"
, HospitalTable.Columns["No"]
, DepartmentTable.Columns["HospitalNo"]
, false)
, new DataRelation
("Department_DepartmentDoctor"
, DepartmentTable.Columns["No"]
, DepartmentDoctorTable.Columns["DepartmentNo"]
, false)
};
dataSet.Relations.AddRange(dataRelations);
this.trv_DoctorUnit.Nodes.Clear();
foreach (DataRow RegionRow in RegionTable.Rows)
{
TreeNode RegionNode = new TreeNode();
RegionNode.Text = RegionRow["Name"].ToString();
this.trv_DoctorUnit.Nodes.Add(RegionNode);
foreach (DataRow HospitalRow in RegionRow.GetChildRows("Region_Hospital"))
{
TreeNode HospitalNode = new TreeNode();
HospitalNode.Text = HospitalRow["Name"].ToString();
RegionNode.Nodes.Add(HospitalNode);
foreach (DataRow DepartmentRow in HospitalRow.GetChildRows("Hospital_Department"))
{
TreeNode DepartmentNode = new TreeNode();
DepartmentNode.Text = DepartmentRow["Name"].ToString();
DepartmentNode.Tag = DepartmentRow["No"];
HospitalNode.Nodes.Add(DepartmentNode);
foreach (DataRow DepartmentDoctorRow in DepartmentRow.GetChildRows("Department_DepartmentDoctor"))
{
TreeNode DepartmentDoctorNode = new TreeNode();
DepartmentDoctorNode.Text = DepartmentDoctorRow["Name"].ToString();
DepartmentDoctorNode.Tag = DepartmentDoctorRow["No"];
DepartmentNode.Nodes.Add(DepartmentDoctorNode);
}
}
}
}
}
第二部分:更新
如果需要更新某一表格某一行,代码示例:row["属性名"]=“新内容”
如果需要删除某一表格某一行,代码示例:table.row.Remove()
如果需要新增某一表格某一行,代码示例:table.newrow()
private void button3_Click(object sender, EventArgs e) //单击事件
{
string Str = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
using (SqlConnection conn = new SqlConnection(Str))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "select * from T_Age";
DataSet dataset = new DataSet();
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dataset);
DataTable table = dataset.Tables[0];
DataRow row = table.Rows[0];
row["Name"]="小高"; //将第一行的 Name 字段,更改为 "小高"
table.Rows.RemoveAt(1); //删除第二行
DataRow dr = table.NewRow();//增加新行
SqlCommandBuilder builder = new SqlCommandBuilder(adapter) //自动生成操作命令
adpter.Update(dataset);
}
}
}
}