第六周学习笔记

wllw6 wllw6     2022-10-08     426

关键词:

第六周学习笔记

一、阅读器的使用

本周学习了阅读器的使用,先是调用SQL命令的方法ExecuteReader来执行命令,并获取数据阅读器。然后在数据阅读器的索引器中指定列名,从而访问当前记录的指定列的值

C#部分主要代码如下:

SqlConnection sqlConnection = new SqlConnection();

sqlConnection.ConnectionString =

"Server=(local);Database=HISDatabase;uid=sa;[email protected]";

SqlCommand sqlCommand = new SqlCommand();

sqlCommand.Connection = sqlConnection;

sqlCommand.CommandText = "SELECT * FROM tb_doctor WHERE [email protected];";//指定SQL命令的命令文本

sqlCommand.Parameters.AddWithValue("@no", "3150707048");//SQL命令的参数集合添加参数的名称、值

sqlConnection.Open();

SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();

//调用SQL命令的方法ExecuteReader来执行命令,并获取数据阅读器

if (sqlDataReader.Read())

{

//在数据阅读器的索引器中指定列名,从而访问当前记录的指定列的值,并赋予相应控件

this.txb_no.Text = sqlDataReader["no"].ToString();

this.txb_name.Text = sqlDataReader["name"].ToString();

 

if (sqlDataReader["sex"].ToString ()== "True")

{

this.txb_gender.Text = "";

 

}

else if (sqlDataReader["sex"].ToString() == "False")

{

this.txb_gender.Text = "";

}

this.txb_birthdate.Text = ((DateTime)sqlDataReader["birthdate"]).ToShortDateString();

//生日首先转换为日期时间类型,再调用ToShortDateString方法获取日期部分

this.txb_post.Text = sqlDataReader["post"].ToString();

this.txb_department.Text = sqlDataReader["department"].ToString();

 

}

sqlDataReader.Close();//关闭数据阅读器(同时关闭连接)

        

优化如下:

SqlConnection sqlConnection = new SqlConnection();

sqlConnection.ConnectionString =

"Server=(local);Database=HISDatabase;uid=sa;[email protected]";

SqlCommand sqlCommand = new SqlCommand();

sqlCommand.Connection = sqlConnection;

sqlCommand.CommandText = "SELECT * FROM tb_doctor WHERE [email protected];";

sqlCommand.Parameters.AddWithValue("@no", "3150707048");

sqlConnection.Open();

SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();

int

noOrdinal = sqlDataReader.GetOrdinal("no")

, nameOrdinal = sqlDataReader.GetOrdinal("name")

, genderOrdinal = sqlDataReader.GetOrdinal("sex")

, birthDateOrdinal = sqlDataReader.GetOrdinal("birthdate")

, classOrdinal = sqlDataReader.GetOrdinal("post")

, specialityOrdinal = sqlDataReader.GetOrdinal("department");

if (sqlDataReader.Read())

{

this.txb_no.Text = sqlDataReader["no"].ToString();

this.txb_name.Text = sqlDataReader["name"].ToString();

 

if (sqlDataReader["sex"].ToString() == "True")

{

this.txb_gender.Text = "";

 

}

else if (sqlDataReader["sex"].ToString() == "False")

{

this.txb_gender.Text = "";

}

this.txb_birthdate.Text = ((DateTime)sqlDataReader["birthdate"]).ToShortDateString();

this.txb_post.Text = sqlDataReader["post"].ToString();

this.txb_department.Text = sqlDataReader["department"].ToString();

 

}

sqlDataReader.Close();

 

 

运行结果如下:

 技术分享图片

 

 

要注意的是,在数据阅读器的索引器中指定列名原列名所在数据库中的数据类型进行相应的转化。

 

二、阅读器中日期控件、下拉框的使用

C#主要代码如下:

SqlConnection sqlConnection = new SqlConnection();

sqlConnection.ConnectionString =

"Server=(local);Database=HISDatabase;uid=sa;[email protected]";

SqlCommand sqlCommand = new SqlCommand();

SqlCommand sqlCommand2 = new SqlCommand();

sqlCommand.Connection = sqlConnection;

sqlCommand2.Connection = sqlConnection;

sqlCommand.CommandText = "SELECT * FROM tb_doctor WHERE [email protected];";

sqlCommand2.CommandText = "SELECT * FROM tb_post;";

//指定SQL命令的命令文本;该命令查询所有职称,以用作下拉框数据源

sqlCommand.Parameters.AddWithValue("@no", "3150707048");

 

SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();

//声明并实例化SQL数据适配器,同时借助构造函数,将其SelectCommand属性设为先前创建的SQL命令

sqlDataAdapter.SelectCommand = sqlCommand2;//SQL数据适配器的查询命令属性指向SQL命令

DataTable postTable = new DataTable();//声明并实例化数据表,用于保存所有职称,以用作下拉框数据源

 

sqlConnection.Open();

 

sqlDataAdapter.Fill(postTable);//SQL数据适配器读取数据,并填充职称数据表

this.cmb_post.DataSource = postTable;//将班级下拉框的数据源设为职称数据表

this.cmb_post.DisplayMember = "Name"; //将班级下拉框的显示成员设为职称数据表的名称列

 

SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();

if (sqlDataReader.Read())

{

this.txb_no.Text = sqlDataReader["no"].ToString();

this.txb_name.Text = sqlDataReader["name"].ToString();

this.rdb_1.Checked = (bool)sqlDataReader["sex"];

this.rdb_2.Checked = !(bool)sqlDataReader["sex"];

this.dtp_birthdate.Value  = ((DateTime)sqlDataReader["birthdate"]);

this.cmb_post.SelectedText = (string )sqlDataReader["post"];

this.txb_department.Text = sqlDataReader["department"].ToString();

 

}

sqlDataReader.Close();

 技术分享图片

 

这节内容需要注意,下拉框的内容是另一张表里相应的内容,因此至少有两张表。需实例化两个SQL命令。

 

三、更新内容

载入后,如需对信息进行修改,点击更新按钮,修改信息,数据库端就更新了改信息。

主要代码如下:

SqlConnection sqlConnection = new SqlConnection();                                              

//声明并实例化SQL连接;

sqlConnection.ConnectionString =

"Server=(local);Database=HISDatabase;uid=sa;[email protected]";                             

//在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证);

SqlCommand sqlCommand = new SqlCommand();                                                       //声明并实例化SQL命令;

sqlCommand.Connection = sqlConnection;                                                          //SQL命令的连接属性指向SQL连接;

sqlCommand.CommandText =                                                                        //指定SQL命令的命令文本;

"UPDATE tb_doctor"

+ " SET [email protected],[email protected],[email protected],[email protected],[email protected]"

+ " WHERE [email protected];";

sqlCommand.Parameters.AddWithValue("@name", this.txb_name.Text.Trim());                        

//SQL命令的参数集合添加参数的名称、值;

sqlCommand.Parameters.AddWithValue("@sex", this.rdb_1.Checked);

sqlCommand.Parameters.AddWithValue("@birthdate", this.dtp_birthdate.Value);

sqlCommand.Parameters.AddWithValue("@post", (string )this.cmb_post.SelectedText);

sqlCommand.Parameters.AddWithValue("@department", this.txb_department.Text.Trim());

sqlCommand.Parameters.AddWithValue("@no", "3150707048");

sqlConnection.Open();                                                                           //打开SQL连接;

int rowAffected = sqlCommand.ExecuteNonQuery();                                                 //调用SQL命令的方法ExecuteNonQuery来执行命令,向数据库写入数据,并返回受影响行数;

sqlConnection.Close();                                                                          //关闭SQL连接;

MessageBox.Show("更新" + rowAffected.ToString() + "行。");

 技术分享图片

 

四、实现打开图像功能

点击打开图片按钮,出现“打开图片”对话框,选择相应的图片,在PictureBox控件中显示出来。

主要代码如下:

public partial class frm_DoctorIM : Form

{

private string PhotoFileName;

 

public frm_DoctorIM()

{

InitializeComponent();

this.StartPosition = FormStartPosition.CenterScreen;

this.cmb_post.DropDownStyle = ComboBoxStyle.DropDownList;

}

 

private void btn_Load_Click(object sender, EventArgs e)

{

SqlConnection sqlConnection = new SqlConnection();

sqlConnection.ConnectionString =

"Server=(local);Database=HISDatabase;uid=sa;[email protected]";

SqlCommand sqlCommand = new SqlCommand();

SqlCommand sqlCommand2 = new SqlCommand();

sqlCommand.Connection = sqlConnection;

sqlCommand2.Connection = sqlConnection;

sqlCommand.CommandText = "SELECT * FROM tb_doctor WHERE [email protected];";

sqlCommand2.CommandText = "SELECT * FROM tb_post;";

sqlCommand.Parameters.AddWithValue("@no", "3150707048");

 

SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();

sqlDataAdapter.SelectCommand = sqlCommand2;

DataTable postTable = new DataTable();

 

sqlConnection.Open();

 

sqlDataAdapter.Fill(postTable);

this.cmb_post.DataSource = postTable;

this.cmb_post.DisplayMember = "Name";

 

SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();

byte[] photoBytes = null;

if (sqlDataReader.Read())

{

this.txb_no.Text = sqlDataReader["no"].ToString();

this.txb_name.Text = sqlDataReader["name"].ToString();

this.rdb_1.Checked = (bool)sqlDataReader["sex"];

this.rdb_2.Checked = !(bool)sqlDataReader["sex"];

this.dtp_birthdate.Value = ((DateTime)sqlDataReader["birthdate"]);

this.cmb_post.SelectedText = (string)sqlDataReader["post"];

this.txb_department.Text = sqlDataReader["department"].ToString();

photoBytes =

(sqlDataReader["Photo"] == DBNull.Value ? null : (byte[])sqlDataReader["Photo"]);

if (photoBytes != null)                                                                         

//若学生的照片非空;

{

MemoryStream memoryStream = new MemoryStream(photoBytes);                                   

//声明并实例化内存流,用于读取照片的字节数据;

this.ptb_Photo.Image = Image.FromStream(memoryStream);                                      

//调用图像的静态方法FromStream从内存流中读取图像,并赋予图像框;

}

 

}

sqlDataReader.Close();

}

 

private void btn_Update_Click(object sender, EventArgs e)

{

MemoryStream memoryStream = new MemoryStream();

this.ptb_Photo.Image.Save(memoryStream, ImageFormat.Bmp);

byte[] photoBytes = new byte[memoryStream.Length];

memoryStream.Seek(0, SeekOrigin.Begin);

memoryStream.Read(photoBytes, 0, photoBytes.Length);

 

SqlConnection sqlConnection = new SqlConnection();                                              

//声明并实例化SQL连接;

sqlConnection.ConnectionString =

"Server=(local);Database=HISDatabase;uid=sa;[email protected]";                             

//在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证);

SqlCommand sqlCommand = new SqlCommand();                                                       //声明并实例化SQL命令;

sqlCommand.Connection = sqlConnection;                                                          //SQL命令的连接属性指向SQL连接;

sqlCommand.CommandText =                                                                        //指定SQL命令的命令文本;

"UPDATE tb_doctor"

+ " SET [email protected],[email protected],[email protected],[email protected],[email protected],[email protected]"

+ " WHERE [email protected];";

sqlCommand.Parameters.AddWithValue("@name", this.txb_name.Text.Trim());                         

//SQL命令的参数集合添加参数的名称、值;

sqlCommand.Parameters.AddWithValue("@sex", this.rdb_1.Checked);

sqlCommand.Parameters.AddWithValue("@birthdate", this.dtp_birthdate.Value);

sqlCommand.Parameters.AddWithValue("@post", (string)this.cmb_post.SelectedText);

sqlCommand.Parameters.AddWithValue("@department", this.txb_department.Text.Trim());

sqlCommand.Parameters.AddWithValue("@Photo", photoBytes);

 

sqlCommand.Parameters.AddWithValue("@no", "3150707048");

sqlConnection.Open();                                                                           //打开SQL连接;

int rowAffected = sqlCommand.ExecuteNonQuery();                                                 //调用SQL命令的方法ExecuteNonQuery来执行命令,向数据库写入数据,并返回受影响行数;

sqlConnection.Close();                                                                          //关闭SQL连接;

MessageBox.Show("更新" + rowAffected.ToString() + "行。");

}

 

private void btn_OpenPhoto_Click(object sender, EventArgs e)

{

OpenFileDialog openPhotoDialog = new OpenFileDialog()

{

Title = "打开照片文件(位图格式)"

,Filter = "BMP Files (*.bmp)|*.bmp;*.jpg;*.png;"

,InitialDirectory = @"C:\"

};

if (openPhotoDialog.ShowDialog() == DialogResult.OK)

{

this.PhotoFileName = openPhotoDialog.FileName;

this.ptb_Photo.Image = Image.FromFile(this.PhotoFileName);

}

}

}

 技术分享图片

 

更新的内容如下即选中的行:

 技术分享图片

 

 

五、数据适配器和数据表的应用

利用数据网格视图来显示信息,实现载入,提交功能。数据库端数据也同步更新。

主要代码如下:

private void btn_Load_Click(object sender, EventArgs e)

{

SqlConnection sqlConnection = new SqlConnection();

sqlConnection.ConnectionString =

"Server=(local);Database=HISDatabase;uid=sa;[email protected]";

SqlCommand sqlCommand = new SqlCommand();

sqlCommand.Connection = sqlConnection;

sqlCommand.CommandText = "SELECT * FROM tb_doctor;";

SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();

sqlDataAdapter.SelectCommand = sqlCommand;

DataTable doctorTable = new DataTable();

sqlConnection.Open();

sqlDataAdapter.Fill(doctorTable);

sqlConnection.Close();

this.dgv_Score.DataSource = doctorTable;

 

}

private void btn_Submit_Click(object sender, EventArgs e)

{

SqlConnection sqlConnection = new SqlConnection();

sqlConnection.ConnectionString =

"Server=(local);Database=HISDatabase;uid=sa;[email protected]";

SqlCommand insertCommand = new SqlCommand();

insertCommand.Connection = sqlConnection;

insertCommand.CommandText =

"INSERT tb_doctor"

+ "(no,name,sex,post,department,phone,birthdate)"

+ " VALUES(@no,@name,@sex,@post,@department,,@phone,@birthdate);";

 

insertCommand.Parameters.Add("@no", SqlDbType.Char, 10, "no");

insertCommand.Parameters.Add("@name", SqlDbType.VarChar, 0, "name");

insertCommand.Parameters.Add("@sex", SqlDbType.VarChar, 0, "sex");

insertCommand.Parameters.Add("@post", SqlDbType.VarChar, 0, "post");

insertCommand.Parameters.Add("@department", SqlDbType.VarChar, 0, "department");

insertCommand.Parameters.Add("@phone", SqlDbType.VarChar, 0, "phone");

insertCommand.Parameters.Add("@birthdate", SqlDbType.VarChar, 0, "birthdate");

 

 

SqlCommand updateCommand = new SqlCommand();

updateCommand.Connection = sqlConnection;

updateCommand.CommandText =

"UPDATE tb_doctor"

+ " SET [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected]"

+ " WHERE [email protected];";

updateCommand.Parameters.Add("@NewNo", SqlDbType.Char, 10, "no");

updateCommand.Parameters.Add("@name", SqlDbType.VarChar, 0, "name");

updateCommand.Parameters.Add("@sex", SqlDbType.VarChar, 0, "sex");

updateCommand.Parameters.Add("@post", SqlDbType.VarChar, 0, "post");

updateCommand.Parameters.Add("@department", SqlDbType.VarChar, 0, "department");

updateCommand.Parameters.Add("@phone", SqlDbType.VarChar, 0, "phone");

updateCommand.Parameters.Add("@birthdate", SqlDbType.VarChar, 0, "birthdate");

 

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_doctor"

+ " WHERE [email protected];";

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  doctorTable1 = (DataTable)this.dgv_Score.DataSource;                                 

//声明数据表,并指向数据网格视图的数据源;数据源默认类型为object,还需强制转换类型;

sqlConnection.Open();                                                                           //打开SQL连接;

int rowAffected = sqlDataAdapter.Update(doctorTable1);                                         

//SQL数据适配器根据学生数据表提交所有更新,并返回受影响行数;

sqlConnection.Close();                                                                          //关闭SQL连接;

MessageBox.Show("更新" + rowAffected.ToString() + "行。");

}

 技术分享图片

 技术分享图片

 技术分享图片

吴恩达机器学习笔记-第六周

十、应用机器学习的建议10.1决定下一步做什么很多时候我们会发现我们通过最小化代价函数获得的模型所预测的值和真实值有很大的偏差(其实就是泛化能力差),此时我们可以在训练完之后对我们的模型进行诊断测试。测试模型... 查看详情

java学习第六周

这是暑假学习的第六周,在这周我练习了老师给的例题,还是有一些地方看不懂,这周我对那些不懂的地方用看视频来进行解答,以及进行第二次复习。下周我会对Java进行更加详细的复习,做好笔记,在LeetCode上练习java的题目... 查看详情

第六周笔记

查看详情

第六周笔记

  查看详情

第六周笔记

  查看详情

第六周笔记

1 查看详情

第六周笔记150206124

查看详情

第六周笔记150206116

查看详情

第六周笔记150206312

查看详情

第六周笔记150206205

查看详情

第六周笔记150206201

   查看详情

第六周课堂笔记

查看详情

第六周课堂笔记

查看详情

第六周笔记150206203李景盛

查看详情

第六周笔记肖婧150206316

查看详情

学习进度条(第六周)

第六周的学习进度条  第六周所花时间700分钟代码量1200行博客量1篇  了解知识点快速开发流程,web应用的开发,数据库的管理和链接 查看详情

个人学习进度(第六周)

所花时间15个小时代码量500行左右博客量两篇了解到的知识点  查看详情

学习进度第六周

所花时间15小时代码量400行博客1篇知识点地杰斯特拉求最短路径  查看详情