WinForms搜索按钮优化需求:文本框为空点击时无报错无操作
解决文本框为空时搜索按钮无错误执行的问题
当前代码在ID_Number1文本框为空或输入非整数内容时,执行int.Parse会抛出异常,同时存在SQL注入风险和数据库连接泄漏隐患。以下是修改后的代码,实现空输入时不执行操作且无错误:
private void button4_Click(object sender, EventArgs e) { // 验证输入有效性:为空或无法转为整数则直接返回 if (string.IsNullOrWhiteSpace(ID_Number1.Text) || !int.TryParse(ID_Number1.Text, out int schoolId)) { // 可选:添加用户提示,如 MessageBox.Show("请输入有效的学生ID"); return; } // 使用using语句自动释放数据库连接,避免资源泄漏 using (SqlConnection con = new SqlConnection("Data Source=DESKTOP-IPS9HAF\\JUSTINEVILLATEST;Initial Catalog=School_Records;User ID=zidex_server;Password=killerblade")) { con.Open(); // 采用参数化查询,杜绝SQL注入风险 SqlCommand comm = new SqlCommand("Select * from Students_Record where SchoolID = @SchoolId", con); comm.Parameters.AddWithValue("@SchoolId", schoolId); using (SqlDataReader srd = comm.ExecuteReader()) { if (srd.Read()) { GetFirstName.Text = srd.GetValue(1).ToString(); GetLastName.Text = srd.GetValue(2).ToString(); Course.Text = srd.GetValue(3).ToString(); YearLevel.Text = srd.GetValue(4).ToString(); Address.Text = srd.GetValue(5).ToString(); Contact_Number.Text = srd.GetValue(6).ToString(); Position_box.Text = srd.GetValue(8).ToString(); Vaccinated_Box.Text = srd.GetValue(9).ToString(); // 检查图片字段是否为空,避免读取空值出错 if (!srd.IsDBNull(10)) { MemoryStream mem = new MemoryStream(srd.GetSqlBytes(10).Buffer); Getting_Picture.Image = Image.FromStream(mem); } else { Getting_Picture.Image = null; } } else { // 未找到记录时清空所有控件内容 GetFirstName.Text = string.Empty; GetLastName.Text = string.Empty; Course.Text = string.Empty; YearLevel.Text = string.Empty; Address.Text = string.Empty; Contact_Number.Text = string.Empty; Position_box.Text = string.Empty; Vaccinated_Box.Text = string.Empty; Getting_Picture.Image = null; } } } }
关键修改说明
- 输入验证:通过
string.IsNullOrWhiteSpace判断空输入,int.TryParse确保输入为有效整数,无效则直接终止方法执行,避免解析异常。 - 参数化查询:替换字符串拼接SQL的写法,改用参数传递查询条件,彻底避免SQL注入攻击,同时防止输入格式导致的SQL语法错误。
- 资源自动释放:使用
using语句包裹SqlConnection和SqlDataReader,确保即使发生异常,数据库连接和读取器资源也能被自动释放,避免连接泄漏。 - 空值与无结果处理:检查图片字段是否为数据库空值,防止加载图片时出错;未找到对应学生记录时,清空所有显示控件,提升用户体验。
内容的提问来源于stack exchange,提问作者Justine Louise Villa
相关产品推荐
相关产品推荐

