在我们编写代码的时候从数据库里取出数据,填充到dataset里,再根据表的名字,实例化到 DataTable 中。下面是 Ado.Net 关系:Connection_____Command____DataAdapter____Dataset _____Datareader
ADO.NET可以在与数据库断开连接的方式下通过DataSet或DataTable对象进行数据处理,当需要更新数据时才重新与数据源进行连接,并更新数据源。
一、思维导图:
二、知识点描述:
Data Table的构造函数:
编号 | 构造函数 | 描述 |
1 | DataTable() | 它用于初始化没有参数的DataTable类的新实例。 |
2 | DataTable(String) | 它用于使用指定的表名初始化DataTable类的新实例。 |
3 | DataTable(SerializationInfo, StreamingContext) | 它用于使用SerializationInfo和StreamingContext初始化DataTable类的新实例。 |
4 | DataTable(String, String) | 它用于使用指定的表名和名称空间初始化DataTable类的新实例。 |
属性:
编号 | 属性 | 描述 |
1 | Columns | 它用于获取属于此表的列的集合。 |
2 | Constraints | 它被用来获取由这个表维护的约束的集合。 |
3 | DataSet | 它用于获取此表所属的DataSet。 |
4 | DefaultView | 它用于获取可能包含过滤视图的表的自定义视图。 |
5 | HasErrors | 它用于获取指示DataSet表中的任何行中是否存在错误的值。 |
6 | MinimumCapacity | 它用于获取或设置此表的初始起始大小。 |
7 | PrimaryKey | 它用于获取或设置一个用作数据表主键的列数组。 |
8 | Rows | 它用于获取属于此表的行的集合。 |
9 | TableName | 它用于获取或设置DataTable的名称。 |
创建对象:
创建方法有两种:1.使用DataTable类的构造函数创建DataTable对象
DataTable table = new DataTable( )
2.调用DataSet的Tables对象的Add方法创建DataTable对象
DataSet dataset = new dataSet( );
DataTable table = dataset.Tables.Add(“MyTableName”);
在DataTable对象中添加列:调用DataTable对象的Column中的Add方法添加列
在DataTable对象中创建行:由于DataTable对象的每一行都是一个DataRow对象,所以创建行时可以利用DataTable对象的NewRow方法创建一个DataRow对象,并设置新行中各列的数据,然后利用Add方法将DataRow对象添加到表中
将SQL Server数据库中的表填充到DataTable对象中:有两种方式:
1.使用fill方法填充DataTable
private void useDataTableByFill()
{
SqlConnection myConnection = newSqlConnection(ConfigurationManager.ConnectionStrings["sqlConnectionString"].ConnectionString);
DataTable myDataTable = new DataTable();
SqlDataAdapter myDp = newSqlDataAdapter("select * from authors", myConnection);
myDp.Fill(myDataTable);
GridView1.DataSource =myDataTable.DefaultView;
GridView1.DataBind();
myConnection.Dispose();
myDp.Dispose();
}
2.使用使用DataReader方法:
private void useDataTableByDataReader()
{
SqlConnection myConnection = newSqlConnection(ConfigurationManager.ConnectionStrings["sqlConnectionString"].ConnectionString);
DataTable myDataTable = new DataTable();
SqlCommand myCommand = newSqlCommand("select * from authors", myConnection);
myConnection.Open();
SqlDataReader dr =myCommand.ExecuteReader(CommandBehavior.CloseConnection);
myDataTable.Load(dr);
GridView1.DataSource =myDataTable.DefaultView;
GridView1.DataBind();
dr.Close();
dr.Dispose();
myCommand.Dispose();
}
三、示例代码:
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(); //声明并实例化SQL数据适配器;
sqlDataAdapter.SelectCommand = sqlCommand; //将SQL数据适配器的查询命令属性指向SQL命令;
this.CourseTable = new DataTable(); //实例化本窗体的课程数据表,用于保存所有课程,以用作数据网格视图数据源;
this.CourseTable.TableName = "StudentScore"; //设置课程数据表的表名;由于该查询访问多张表,数据适配器无法自动指定表名,故需手动指定表名;
sqlConnection.Open(); //打开SQL连接;
sqlDataAdapter.Fill(this.CourseTable); //SQL数据适配器读取数据,并只将架构填充至课程数据表;
DataColumn rowIdColumn = new DataColumn(); //声明并实例化数据列,用于保存行编号;
rowIdColumn.ColumnName = "RowID"; //设置数据列的名称;
rowIdColumn.DataType = typeof(int); //设置数据列的类型;类型需借助typeof获取;
rowIdColumn.AutoIncrement = true; //设置数据列为自增列;
rowIdColumn.AutoIncrementSeed = 1; //设置数据列的自增种子为1;
rowIdColumn.AutoIncrementStep = 1; //设置数据列的自增步长为1;
this.CourseTable.Columns.Add(rowIdColumn); //数据列加入本窗体的课程数据表的列集合;
sqlCommand.CommandText =
"SELECT S.No,S.Name AS SName,C.Name AS CName,SS.TotalScore"
+ " FROM tb_Student AS S "
+ " JOIN tb_StudentScore AS SS ON S.No=SS.StudentNo"
+ " JOIN tb_Course AS C ON SS.CourseNo=C.No;"; //指定SQL命令的命令文本;该命令查询所有学生成绩;
sqlDataAdapter.Fill(this.CourseTable); //SQL数据适配器读取数据,并填充课程数据表;
sqlConnection.Close();
SqlConnection sqlConnection = new SqlConnection(); //声明并实例化SQL连接;
sqlConnection.ConnectionString =
"Server=(local);Database=EduBaseDemo;Integrated Security=sspi"; //在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证);
SqlCommand insertCommand = new SqlCommand(); //声明并实例化用于插入的SQL命令;
insertCommand.Connection = sqlConnection; //将SQL命令的连接属性指向SQL连接;
insertCommand.CommandText =
"INSERT tb_CourseSelection(StudentNo,CourseNo,OrderBook)"
+ "VALUES(@StudentNo,@CourseNo,@OrderBook);"; //指定SQL命令的命令文本;该命令插入选课记录;
insertCommand.Parameters.AddWithValue("@StudentNo", "3120707001"); //向SQL命令的参数集合添加参数的名称、SQL Server数据类型、长度(仅用于定长类型)、所绑定的数据表中的列名;
insertCommand.Parameters.Add("@CourseNo", SqlDbType.Char, 4, "No");
insertCommand.Parameters.Add("@OrderBook", SqlDbType.Bit, 0, "OrderBook");
SqlCommand updateCommand = new SqlCommand(); //声明并实例化用于更新(教材订购状态)的SQL命令;
updateCommand.Connection = sqlConnection; //将SQL命令的连接属性指向SQL连接;
updateCommand.CommandText = //指定SQL命令的命令文本;该命令更新教材订购状态;
"UPDATE tb_CourseSelection"
+ " SET OrderBook=@OrderBook"
+ " WHERE StudentNo=@StudentNo AND CourseNo=@CourseNo;";
updateCommand.Parameters.AddWithValue("@StudentNo", "3120707001"); //向SQL命令的参数集合添加参数的名称、SQL Server数据类型、长度(仅用于定长类型)、所绑定的数据表中的列名;
updateCommand.Parameters.Add("@CourseNo", SqlDbType.Char, 4, "No");
updateCommand.Parameters.Add("@OrderBook", SqlDbType.Bit, 0, "OrderBook");
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(); //声明并实例化SQL数据适配器;
sqlDataAdapter.InsertCommand = insertCommand; //将SQL数据适配器的插入命令属性指向SQL命令;
sqlDataAdapter.UpdateCommand = updateCommand; //将SQL数据适配器的更新命令属性指向SQL命令;
sqlConnection.Open(); //打开SQL连接;
int rowAffected = sqlDataAdapter.Update(this.SelectedCourseTable); //SQL数据适配器根据学生数据表提交更新,并返回受影响行数;
sqlConnection.Close(); //关闭SQL连接;
MessageBox.Show("插入" + rowAffected.ToString() + "行。");