前端界面操作数据表,主要是是指对SQL数据表进行增删改查操作。
操作平台:C#2008+SQL
一、思维导图:
二、知识点介绍
1.利用前端界面对数据库进行操作,最关键的一点就是实现前端界面与数据库的连接。
数据库的连接可以通过设置,也可以直接用代码连接。我们建议用代码连接。代码连接的话,是指连接字符串。如下为连接字符串的示例代码:(以windows登录为例子)
SqlConnection sqlConnection = new SqlConnection(); //声明并实例化SQL连接; sqlConnection.ConnectionString = "Server=(Local);Database=数据库名称;Integrated Security=sspi"; //在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证); sqlConnection.Open(); //打开SQL连接; MessageBox.Show //在消息框中显示; ("连接状态:" + sqlConnection.State.ToString() //消息框消息内容; + "\n工作站标识:" + sqlConnection.WorkstationId + "\n服务器地址:" + sqlConnection.DataSource + "\n服务器版本:" + sqlConnection.ServerVersion + "\n数据库名称:" + sqlConnection.Database + "\n\n(单击【确定】后将关闭SQL连接)"); sqlConnection.Close(); //关闭SQL连接; MessageBox.Show //在消息框中显示; ("连接状态:" + sqlConnection.State.ToString());
2.完成了最开始的数据库连接后接下来就是对数据库进行操作了。
操作的话我们分为四个部分,分别是增加,删除,修改和查找,他们有一个共同点就是都可以用DataGirdView进行直接操作。实现增删改查的过程中,要利用控件进行辅助,并结合相关数据库语句。
c#是通过@加变量名传值,通过AddWithValue方法赋值。
增加
- 数据表
- 使用DataGridView控件
- 命令按钮
- 写入
- 调用SQL命令的方法ExecuteNonQuery来执行命令,向数据库写入数据,并返回受影响行数;
- 异常
- 调用SQL命令的方法ExecuteNonQuery来执行命令,向数据库写入数据,并返回受影响行数;捕捉SQL异常;若SQL异常编号为2627,则违反主键/唯一约束,即插入重复值;
- 存储过程
- 调用SQL连接的方法CreateCommand来创建SQL命令;该命令将绑定SQL连接;指定SQL命令的命令文本;命令文本为存储过程名称;SQL命令的类型设为存储过程
- 写入
- 删除
- DateGridView控件
- 更新
- 记录
- 调用SQL命令的方法ExecuteReader来执行命令,并获取数据阅读器;调用数据阅读器的方法GetOrdinal获取各列相应的索引值;
- 使用DataGridView控件
- 记录
- 查找
- 记录
- 调用SQL命令的方法ExecuteReader来执行命令,并获取数据阅读器;调用数据阅读器的方法GetOrdinal获取各列相应的索引值;
- 数据表
- 借助DataGridView
- 命令按钮
- 查询标量
- 调用SQL命令的方法ExecuteScalar来执行命令,并接受单个结果
- 参数
- 直接调用方法AddWithValue向SQL命令的参数集合添加参数的名称、值;通过参数名称访问SQL参数
- 参数方向
- 保存与所输用户号相应的行计数,并从相应的输出参数值中获得行计数
- 查询标量
- 记录
三、代码示例&运行截图
增加&查询:示例(注册向管理员表中增加,登录则为从表中查询)
登录(查询)
SqlConnection sqlConnection = new SqlConnection(); //声明并实例化SQL连接; sqlConnection.ConnectionString = "Server=(local);Database=ZXYY;Integrated Security=sspi"; //在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证); SqlCommand sqlCommand = sqlConnection.CreateCommand(); SqlParameter sqlParameter = new SqlParameter(); //调用SQL连接的方法CreateCommand来创建SQL命令;该命令将绑定SQL连接; if (radobtn_amdin.Checked == true) { sqlCommand.CommandText = "SELECT COUNT(1) FROM 管理员 WHERE 帐号[email protected]帐号 AND 密码=HASHBYTES(‘MD5‘,@密码);"; //指定SQL命令的命令文本;命令文本包含参数; #region SQL参数用法1 //声明并实例化SQL参数; sqlParameter.ParameterName = "@帐号"; //设置SQL参数的名称; sqlParameter.Value = this.textbxid.Text.Trim(); //设置SQL参数的长度; sqlParameter.SqlDbType = SqlDbType.Char; //设置SQL参数对应的SQL Server数据类型; sqlParameter.Size = 10; //设置SQL参数的长度; sqlCommand.Parameters.Add(sqlParameter); //向SQL命令的参数集合添加SQL参数; #endregion #region SQL参数用法2 sqlCommand.Parameters.AddWithValue("@密码", this.textbxpsw.Text.Trim()); //直接调用方法AddWithValue向SQL命令的参数集合添加参数的名称、值; sqlCommand.Parameters["@密码"].SqlDbType = SqlDbType.VarChar; //通过参数名称访问SQL参数,并将密码参数的类型设为变长字符串; //SQL参数能自动识别类型;若参数值为字符串,则类型自动设为NVARCHAR,且可在执行时自动转换;但对于相同密码,VARCHAR/NVARCHAR类型所获得的散列值不同,故需手动将SQL参数类型统一设为VARCHAR; #endregion } if (radobon_doctor.Checked == true) { sqlCommand.CommandText = "SELECT COUNT(1) FROM 医生 WHERE 工号[email protected]工号 AND 密码=HASHBYTES(‘MD5‘,@密码);"; //指定SQL命令的命令文本;命令文本包含参数; #region SQL参数用法1 //声明并实例化SQL参数; sqlParameter.ParameterName = "@工号"; //设置SQL参数的名称; sqlParameter.Value = this.textbxid.Text.Trim(); //设置SQL参数的长度; sqlParameter.SqlDbType = SqlDbType.Char; //设置SQL参数对应的SQL Server数据类型; sqlParameter.Size = 10; //设置SQL参数的长度; sqlCommand.Parameters.Add(sqlParameter); //向SQL命令的参数集合添加SQL参数; #endregion #region SQL参数用法2 sqlCommand.Parameters.AddWithValue("@密码", this.textbxpsw.Text.Trim()); //直接调用方法AddWithValue向SQL命令的参数集合添加参数的名称、值; sqlCommand.Parameters["@密码"].SqlDbType = SqlDbType.VarChar; //通过参数名称访问SQL参数,并将密码参数的类型设为变长字符串; //SQL参数能自动识别类型;若参数值为字符串,则类型自动设为NVARCHAR,且可在执行时自动转换;但对于相同密码,VARCHAR/NVARCHAR类型所获得的散列值不同,故需手动将SQL参数类型统一设为VARCHAR; #endregion } sqlConnection.Open(); //打开SQL连接; int rowCount = (int)sqlCommand.ExecuteScalar(); //调用SQL命令的方法ExecuteScalar来执行命令,并接受单个结果(即标量); sqlConnection.Close(); //关闭SQL连接; if (rowCount == 1) //若查得所输用户号相应的1行记录; { MessageBox.Show("登录成功。"); this.textbxid.Text = ""; this.textbxpsw.Text = "";//显示正确提示; frm_kslist a=new frm_kslist(); a.Show (); } else //否则; { MessageBox.Show("用户号/密码有误,请重新输入!"); //显示错误提示; this.textbxpsw.Focus(); //密码文本框获得焦点; this.textbxpsw.SelectAll(); //密码文本框内所有文本被选中; }
增加(注册)
if (this.textbxid.Text.Trim() == "") //若用户号文本框为空; { MessageBox.Show("用户号不能为空!"); //给出错误提示; this.textbxid.Focus(); //用户号文本框获得焦点; return; //返回; } if (this.textbxpsw.Text.Trim() == "") //若密码文本框为空; { MessageBox.Show("密码不能为空!"); //给出错误提示; this.textbxpsw.Focus(); //密码文本框获得焦点; return; //返回; } SqlConnection sqlConnection = new SqlConnection(); //声明并实例化SQL连接; sqlConnection.ConnectionString = "Server=(local);Database=ZXYY;Integrated Security=sspi"; //在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证); SqlCommand sqlCommand = sqlConnection.CreateCommand(); if (radobtn_amdin.Checked == true) {//调用SQL连接的方法CreateCommand来创建SQL命令;该命令将绑定SQL连接; sqlCommand.CommandText = "INSERT 管理员 (帐号,密码) VALUES(@帐号,HASHBYTES(‘MD5‘,@密码));"; //指定SQL命令的命令文本;命令文本包含参数; sqlCommand.Parameters.AddWithValue("帐号", this.textbxid.Text.Trim()); //向SQL命令的参数集合添加参数的名称、值; sqlCommand.Parameters.AddWithValue("密码", this.textbxpsw.Text.Trim()); sqlCommand.Parameters["密码"].SqlDbType = SqlDbType.VarChar; } if (radobon_doctor.Checked ==true ) {//调用SQL连接的方法CreateCommand来创建SQL命令;该命令将绑定SQL连接; sqlCommand.CommandText = "INSERT 医生 (工号,密码) VALUES(@工号,HASHBYTES(‘MD5‘,@密码));"; //指定SQL命令的命令文本;命令文本包含参数; sqlCommand.Parameters.AddWithValue("工号", this.textbxid.Text.Trim()); //向SQL命令的参数集合添加参数的名称、值; sqlCommand.Parameters.AddWithValue("密码", this.textbxpsw.Text.Trim()); sqlCommand.Parameters["密码"].SqlDbType = SqlDbType.VarChar; } //将密码参数的类型设为变长字符串; //SQL参数自动识别类型;若参数值为字符串,则类型自动设为NVARCHAR,且可在执行时自动转换;但对于相同密码,VARCHAR/NVARCHAR类型所获得的散列值不同,故需手动将SQL参数类型统一设为VARCHAR; int rowAffected = 0; //声明整型变量,用于保存受影响行数; string message = ""; //声明字符串变量,用于保存消息; try //尝试; { sqlConnection.Open(); //打开SQL连接; rowAffected = sqlCommand.ExecuteNonQuery(); //调用SQL命令的方法ExecuteNonQuery来执行命令,向数据库写入数据,并返回受影响行数; } catch (SqlException sqlEx) //捕捉SQL异常; { if (sqlEx.Number == 2627) //若SQL异常编号为2627,则违反主键/唯一约束,即插入重复值; { message = "您注册的用户号已存在,请重新输入!"; this.textbxid.Text = ""; this.textbxpsw.Text = "";//给出合适的错误提示; } else //否则; { message = "注册失败!"; //给出一般错误提示; } } finally //结束; { sqlConnection.Close(); //关闭SQL连接; } if (rowAffected == 1) //若成功写入1行记录; { message = "注册成功。"; this.textbxid.Text = ""; this.textbxpsw.Text = "";//给出正确提示; } MessageBox.Show(message); //显示提示;
运行结果
更改:
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 = //指定SQL命令的命令文本; "UPDATE tb_Student" + " 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("@Gender", this.rdb_Male.Checked); sqlCommand.Parameters.AddWithValue("@BirthDate", this.dtp_BirthDate.Value); sqlCommand.Parameters.AddWithValue("@ClassNo", (int)this.cmb_Class.SelectedValue); sqlCommand.Parameters.AddWithValue("@Speciality", this.txb_Speciality.Text.Trim()); sqlCommand.Parameters.AddWithValue("@No", "3120707001"); sqlConnection.Open(); //打开SQL连接; int rowAffected = sqlCommand.ExecuteNonQuery(); //调用SQL命令的方法ExecuteNonQuery来执行命令,向数据库写入数据,并返回受影响行数; sqlConnection.Close(); //关闭SQL连接; MessageBox.Show("更新" + rowAffected.ToString() + "行。");
接下来对DataGrideView的增删改查内容进行介绍:
点击提交,实现增删改查的功能:
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 [email protected],[email protected],[email protected],[email protected],[email protected],[email protected]" + " WHERE [email protected];"; 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 [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 studentTable1 = (DataTable)this.dgv_Score.DataSource; //声明数据表,并指向数据网格视图的数据源;数据源默认类型为object,还需强制转换类型; sqlConnection.Open(); //打开SQL连接; int rowAffected = sqlDataAdapter.Update(studentTable1); //SQL数据适配器根据学生数据表提交所有更新,并返回受影响行数; sqlConnection.Close(); //关闭SQL连接; MessageBox.Show("更新" + rowAffected.ToString() + "行。"); //在消息框显示受影响行数;
原文地址:https://www.cnblogs.com/nicestlala/p/9829511.html
时间: 2024-10-07 18:37:15