1.DataAdapter对象
充当DataSet和数据源之间用于检索和保存数据的桥梁。DataAdapter类代表用于填充DataSet以及更新数据源的一组数据库命令和一个数据库连接
1.1属性和方法
属性:
SelectCommand引用从数据源中检索行的Command对象。
InsertCommand引用将插入的行从DataSet写入数据源的Command对象。
UpdateCommand引用将修改的行从DataSet写入数据源的Command对象。
DeleteCommand引用从数据源中删除行的Command对象。
方法:
Fill。使用SqlDataAdapter的这个方法,从数据源增加或刷新行,并将这些行放到DataSet表中。Fill方法调用SelectCommand属性所指定的SELECT语句。
Update。使用DataAdapter对象的这个方法,将DataSet表的更改传送到相应的数据源中。该方法为DataSet的DataTable中每一指定的行调用相应的INSERT、UPDATE或DELETE命令。
2.DataTable对象
一个临时保存数据的网格虚拟表(表示内存中数据的一个表)
2.1属性和方法
属性
Columns:返回属于这个表的列的集合
DataSet:获得包含这个表的DataSet
DefaultView:获得表的自定义视图,它可能包含已过滤的视图或游标位置
MinimumCapacity:获得或设置表中行的初始数目(默认为25)
Rows:返回属于这个表的行集合
TableName:获得或设置表的名称。这个属性还可以被指定为构造函数的参数
方法
AcceptChanges:提交对该表的所有修改
NewRow:添加一个新的DataRow
3.ComboBox控件
3.1属性和方法
属性
DataSource :获取或设置此 ComboBox 的数据源。
DisplayMember :获取或设置要为此 ListControl 显示的属性。
SelectedText :获取或设置 ComboBox 的可编辑部分中选定的文本。
ValueMember :获取或设置一个属性,该属性将用作 ListControl 中的项的实际值。
SelectedValue:获取或设置由 ValueMember 属性指定的成员属性的值。
注:
DisplayMember 与ValueMember 属性的区别: DisplayMember绑定的是需显示的字段,ValueMember绑定的是对应的值 。
方法
Focus为控件设置输入焦点。
TextBox和DateTimePicker控件
输出代码:
SqlConnection sqlConnection = new SqlConnection();
sqlConnection.ConnectionString =
"Server=(local);Database=EduBase2018;Integrated Security=sspi";
SqlCommand sqlCommand = new SqlCommand();
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandText = "SELECT * FROM Guahaodan WHERE Gh_no=@Gh_no;";
sqlCommand.Parameters.AddWithValue("@Gh_no", "5432001");
sqlConnection.Open();
SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();
if (sqlDataReader.Read())
{
this.Gh_no.Text = sqlDataReader["Gh_no"].ToString();
this.Ghlb.Text = sqlDataReader["Ghlb"].ToString();
this.Zzys.Text = sqlDataReader["Zzys"].ToString();
this.Ghrxm.Text = sqlDataReader["Ghrxm"].ToString();
this.Ghks.Text = sqlDataReader["Ghks"].ToString();
this.Gh_date.Value = (DateTime)sqlDataReader["Gh_date"];
}
sqlDataReader.Close();
输入代码:
SqlConnection sqlConnection = new SqlConnection();
sqlConnection.ConnectionString =
"Server=(local);Database=EduBase2018;Integrated Security=sspi";
SqlCommand sqlCommand = sqlConnection.CreateCommand();
sqlCommand.CommandText =
"INSERT Guahaodan (Gh_no,Ghlb,Zzys,Ghrxm,Ghks,Gh_date) VALUES(@Gh_no,@Ghlb,@Zzys,@Ghrxm,@Ghks,@Gh_date);";
sqlCommand.Parameters.AddWithValue("@Gh_no", this.Gh_no.Text.Trim());
sqlCommand.Parameters.AddWithValue("@Ghlb", this.Ghlb.Text.Trim());
sqlCommand.Parameters.AddWithValue("@Zzys", this.Zzys.Text.Trim());
sqlCommand.Parameters.AddWithValue("@Ghrxm", this.Ghrxm.Text.Trim());
sqlCommand.Parameters.AddWithValue("@Ghks", this.Ghks.Text.Trim());
sqlCommand.Parameters.AddWithValue("@Gh_date", this.Gh_date.Value);
sqlConnection.Open();
int rowAffected = sqlCommand.ExecuteNonQuery();
sqlConnection.Close();
if (rowAffected == 1)
{
MessageBox.Show("添加成功。");
}
else
{
MessageBox.Show("添加失败!");
}
PitureBox和ComboBox控件
输出代码:
SqlConnection sqlConnection = new SqlConnection(); //声明并实例化SQL连接;
sqlConnection.ConnectionString =
"Server=(local);Database=EduBaseDemo;Integrated Security=sspi"; //在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证);
SqlCommand sqlCommand = new SqlCommand(); //声明并实例化SQL命令;
SqlCommand sqlCommand2 = new SqlCommand(); //声明并实例化SQL命令;
sqlCommand.Connection = sqlConnection; //将SQL命令的连接属性指向SQL连接;
sqlCommand2.Connection = sqlConnection; //将SQL命令的连接属性指向SQL连接;
sqlCommand.CommandText = "SELECT * FROM tb_Class;"; //指定SQL命令的命令文本;该命令查询所有班级,以用作下拉框数据源;
sqlCommand2.CommandText = "SELECT * FROM tb_Student WHERE No=@No;"; //指定SQL命令的命令文本;该命令查询指定学生;
sqlCommand2.Parameters.AddWithValue("@No", "3120707001"); //向SQL命令的参数集合添加参数的名称、值;
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(); //声明并实例化SQL数据适配器,同时借助构造函数,将其SelectCommand属性设为先前创建的SQL命令;
sqlDataAdapter.SelectCommand = sqlCommand; //将SQL数据适配器的查询命令属性指向SQL命令;
DataTable classTable = new DataTable(); //声明并实例化数据表,用于保存所有班级,以用作下拉框数据源;
sqlConnection.Open(); //打开SQL连接;
sqlDataAdapter.Fill(classTable); //SQL数据适配器读取数据,并填充班级数据表;
this.cmb_Class.DataSource = classTable; //将班级下拉框的数据源设为班级数据表;
this.cmb_Class.DisplayMember = "Name"; //将班级下拉框的显示成员设为班级数据表的名称列;
this.cmb_Class.ValueMember = "No"; //将班级下拉框的值成员设为班级数据表的编号列;
SqlDataReader sqlDataReader = sqlCommand2.ExecuteReader(); //调用SQL命令的方法ExecuteReader来执行命令,并获取数据阅读器;
byte[] photoBytes = null; //声明字节数组,用于保存照片数据;但先赋予空值;
if (sqlDataReader.Read()) //若数据阅读器成功读取到下一条记录(首次查询则表示第一条记录);
{
this.txb_No.Text = sqlDataReader["No"].ToString(); //在数据阅读器的索引器中指定列名,从而访问当前记录的指定列的值,并赋予相应控件;
this.txb_Name.Text = sqlDataReader["Name"].ToString();
this.rdb_Male.Checked = (bool)sqlDataReader["Gender"];
this.rdb_Female.Checked = !(bool)sqlDataReader["Gender"];
this.dtp_BirthDate.Value = (DateTime)sqlDataReader["BirthDate"];
this.cmb_Class.SelectedValue = (int)sqlDataReader["ClassNo"];
this.txb_Speciality.Text = sqlDataReader["Speciality"].ToString();
photoBytes =
(sqlDataReader["Photo"] == DBNull.Value ? null : (byte[])sqlDataReader["Photo"]); //根据照片是否为数据库空值,分别将空值、转为字节数组的照片数据赋予事先声明的字节数组;
}
sqlDataReader.Close(); //关闭数据阅读器(同时关闭连接);
if (photoBytes != null) //若学生的照片非空;
{
MemoryStream memoryStream = new MemoryStream(photoBytes); //声明并实例化内存流,用于读取照片的字节数据;
this.ptb_Photo.Image = Image.FromStream(memoryStream); //调用图像的静态方法FromStream从内存流中读取图像,并赋予图像框;
}
输入代码:
OpenFileDialog openPhotoDialog = new OpenFileDialog() //声明并实例化打开文件对话框;
{ //在初始化器中,设置打开文件对话框的各属性;
Title = "打开照片文件(位图格式)" //对话框标题;
, Filter = "BMP Files (*.bmp)|*.bmp" //文件格式过滤器;
, InitialDirectory = @"C:\" //初始目录;
};
if (openPhotoDialog.ShowDialog() == DialogResult.OK) //显示打开文件对话框,若打开文件对话框的对话结果为点击OK键;
{
this.PhotoFileName = openPhotoDialog.FileName; //将对话框获得的文件名,存入本窗体的私有字段中;
this.ptb_Photo.Image = Image.FromFile(this.PhotoFileName); //调用图像的静态方法FromFile从指定文件中读取图像,并赋予图像框;
}
DataGridView控件
输出代码:
SqlConnection sqlConnection = new SqlConnection(); //声明并实例化SQL连接;
sqlConnection.ConnectionString =
"Server=(local);Database=EduBaseDemo;Integrated Security=sspi"; //在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证);
SqlCommand sqlCommand = new SqlCommand(); //声明并实例化SQL命令;
sqlCommand.Connection = sqlConnection; //将SQL命令的连接属性指向SQL连接;
sqlCommand.CommandText = "SELECT * FROM tb_Student;"; //指定SQL命令的命令文本;该命令查询所有学生;
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(); //声明并实例化SQL数据适配器;
sqlDataAdapter.SelectCommand = sqlCommand; //将SQL数据适配器的查询命令属性指向SQL命令;
DataTable studentTable = new DataTable(); //声明并实例化数据表,用于保存所有学生,以用作数据网格视图的数据源;
sqlConnection.Open(); //打开SQL连接;
sqlDataAdapter.Fill(studentTable); //SQL数据适配器读取数据,并填充学生数据表;
sqlConnection.Close(); //关闭SQL连接;
this.dgv_Score.DataSource = studentTable;
输入代码:
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 = //指定SQL命令的命令文本;
"INSERT tb_Student"
+ "(No,Name,Gender,BirthDate,Class,Speciality)"
+ " VALUES(@No,@Name,@Gender,@BirthDate,@Class,@Speciality);";
insertCommand.Parameters.Add("@No", SqlDbType.Char, 10, "No"); //向SQL命令的参数集合添加参数的名称、SQL Server数据类型、长度(仅用于定长类型)、所绑定的数据表中的列名;
insertCommand.Parameters.Add("@Name", SqlDbType.VarChar, 0, "Name");
insertCommand.Parameters.Add("@Gender", SqlDbType.VarChar, 0, "Gender");
insertCommand.Parameters.Add("@BirthDate", SqlDbType.VarChar, 0, "BirthDate");
insertCommand.Parameters.Add("@Class", SqlDbType.VarChar, 0, "Class");
insertCommand.Parameters.Add("@Speciality", SqlDbType.VarChar, 0, "Speciality");
SqlCommand updateCommand = new SqlCommand(); //声明并实例化SQL命令;该命令用于更新记录;
updateCommand.Connection = sqlConnection; //将SQL命令的连接属性指向SQL连接;
updateCommand.CommandText = //指定SQL命令的命令文本;
"UPDATE tb_Student"
+ " SET No=@NewNo,Name=@Name,Gender=@Gender,BirthDate=@BirthDate,Class=@Class,Speciality=@Speciality"
+ " WHERE No=@OldNo;";
updateCommand.Parameters.Add("@NewNo", SqlDbType.Char, 10, "No"); //向SQL命令的参数集合添加参数的名称、SQL Server数据类型、长度(仅用于定长类型)、所绑定的数据表中的列名;
updateCommand.Parameters.Add("@Name",SqlDbType.VarChar,0,"Name");
updateCommand.Parameters.Add("@Gender", SqlDbType.VarChar, 0, "Gender");
updateCommand.Parameters.Add("@BirthDate", SqlDbType.VarChar, 0, "BirthDate");
updateCommand.Parameters.Add("@Class", SqlDbType.VarChar, 0, "Class");
updateCommand.Parameters.Add("@Speciality", SqlDbType.VarChar, 0, "Speciality");
updateCommand.Parameters.Add("@OldNo", SqlDbType.Char, 10, "No"); //若学号发生更改,则还需提供旧学号,以便查询要更改的行;
updateCommand.Parameters["@OldNo"].SourceVersion = DataRowVersion.Original; //旧学号的来源版本,为数据行版本中的原始值;
SqlCommand deleteCommand = new SqlCommand(); //声明并实例化SQL命令;该命令用于删除;
deleteCommand.Connection = sqlConnection; //将SQL命令的连接属性指向SQL连接;
deleteCommand.CommandText = //指定SQL命令的命令文本;
"DELETE tb_Student"
+ " WHERE No=@No;";
deleteCommand.Parameters.Add("@No", SqlDbType.Char, 10, "No");
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(); //声明并实例化SQL数据适配器;
sqlDataAdapter.InsertCommand = insertCommand; //将SQL数据适配器的属性InsertCommand指向用于插入记录的SQL命令;
sqlDataAdapter.UpdateCommand = updateCommand; //将SQL数据适配器的属性UpdateCommand指向用于更新记录的SQL命令;
sqlDataAdapter.DeleteCommand = deleteCommand; //将SQL数据适配器的属性DeleteCommand指向用于删除记录的SQL命令;
DataTable studentTable1 = (DataTable)this.dgv_Score.DataSource; //声明数据表,并指向数据网格视图的数据源;数据源默认类型为object,还需强制转换类型;
sqlConnection.Open(); //打开SQL连接;
int rowAffected = sqlDataAdapter.Update(studentTable1); //SQL数据适配器根据学生数据表提交所有更新,并返回受影响行数;
sqlConnection.Close(); //关闭SQL连接;
MessageBox.Show("更新" + rowAffected.ToString() + "行。"); //在消息框显示受影响行数;