请问一下,我制作了一个窗体,让员工录入生产信息,其中日期是必填项,但若不填写,点击修改保存时,程序会有报错提示,这个按钮的代码如下,请问如何加个提示,若不填写,能提示录入人员,要录入日期项呢;
```c#
private void btnmodify_Click(object sender, EventArgs e)
{
conn = new SqlConnection("server =192.168.100.247;database = Whmesinfo; user = sa;password = whyy@2021");
conn.Open();
try
{
DataTable changedt = dt.GetChanges(); //将发生变化的内容,存储在另一个表内;
foreach(DataRow dr in changedt.Rows)
{
string strsql = string.Empty;
if (dr.RowState == System.Data.DataRowState.Modified) //修改操作;
{
strsql = @"UPDATE [dbo].[w_prohourcount]
SET [date] = '" + Convert.ToDateTime(dr["date"]) + @"'
,[workshop] = '" + dr["workshop"].ToString() + @"'
,[teams] = '" + dr["teams"].ToString() + @"'
,[banci] = '" + dr["banci"].ToString() + @"'
,[process] = '" + dr["process"].ToString() + @"'
,[batchNo] = '" + dr["batchNo"].ToString() + @"'
,[probatchNo] = '" + dr["probatchNo"].ToString() + @"'
,[proname] = '" + dr["proname"].ToString() + @"'
,[spec] = '" + dr["spec"].ToString() + @"'
,[unit] = '" + dr["unit"].ToString() + @"'
,[daypro] = '" + dr["daypro"].ToString() + @"'
,[sumpro] = '" + dr["sumpro"].ToString() + @"'
,[state] = '" + dr["state"].ToString() + @"'
,[pax] = '" + dr["pax"].ToString() + @"'
,[ulh] = '" + dr["ulh"].ToString() + @"'
,[note] = '" + dr["note"].ToString() + @"'
where id = '" + dr["id"].ToString() + "'";
}
else if (dr.RowState == System.Data.DataRowState.Added) //增加操作;
{
strsql = @"INSERT INTO [dbo].[w_prohourcount]
([date],[workshop],[teams],[banci],[process],[batchNo],[probatchNo],[proname],[spec],[unit],[daypro],[sumpro],[state],[pax],[ulh],[note])
values
('" + Convert.ToDateTime(dr["date"].ToString()) + @"'
,'" + dr["workshop"].ToString() + @"'
,'" + dr["teams"].ToString() + @"'
,'" + dr["banci"].ToString() + @"'
,'" + dr["process"].ToString() + @"'
,'" + dr["batchNo"].ToString() + @"'
,'" + dr["probatchNo"].ToString() + @"'
,'" + dr["proname"].ToString() + @"'
,'" + dr["spec"].ToString() + @"'
,'" + dr["unit"].ToString() + @"'
,'" + dr["daypro"].ToString() + @"'
,'" + dr["sumpro"].ToString() + @"'
,'" + dr["state"].ToString() + @"'
,'" + dr["pax"].ToString() + @"'
,'" + (dr["ulh"].ToString() == "" ? "0" : dr["ulh"].ToString()) + @"'
,'" + dr["note"].ToString() + @"')";
}
SqlCommand comm = new SqlCommand(strsql,conn);
comm.ExecuteNonQuery();
}
MessageBox.Show("更新成功");
}
catch (Exception ex)
{
throw;
MessageBox.Show("请输入更新内容");
}
finally { conn.Close(); }
}
```
你如果做这样的校验的话,那你的代码就写得有问题。不能上来就直接操作数据库,要先做数据完整性check,逐行遍历数据,然后弹窗或者别的方式报错
你这代码呀
耦合度太高了
按钮事件里不要直接写逻辑
单独写一个save函数,用来连接数据库,执行insert
再写一个函数,用来判断各个文本框里的值是不是合法的值
按钮事件里按顺序调用这个两个函数,判断第一个函数的返回值是true再继续执行第二个函数
源于chatGPT仅供参考
要在按钮点击事件中加入日期必填的提示,可以使用条件判断来检查日期是否为空。如果日期为空,则弹出提示框告知录入人员需要填写日期项。
以下是修改后的代码示例:
```c#
private void btnmodify_Click(object sender, EventArgs e)
{
conn = new SqlConnection("server =192.168.100.247;database = Whmesinfo; user = sa;password = whyy@2021");
conn.Open();
try
{
DataTable changedt = dt.GetChanges(); //将发生变化的内容,存储在另一个表内;
foreach (DataRow dr in changedt.Rows)
{
string strsql = string.Empty;
if (dr.RowState == System.Data.DataRowState.Modified) //修改操作;
{
// 省略其他代码...
if (string.IsNullOrEmpty(dr["date"].ToString())) // 检查日期是否为空
{
MessageBox.Show("请输入日期");
return; // 返回,不继续执行保存操作
}
// 省略其他代码...
}
// 省略其他代码...
}
MessageBox.Show("更新成功");
}
catch (Exception ex)
{
MessageBox.Show("请输入更新内容");
}
finally
{
conn.Close();
}
}
在上述代码中,我们添加了一个条件判断来检查日期是否为空。如果日期为空,就会弹出提示框,并使用return
语句提前结束保存操作,确保不会执行数据库操作。
```
要想挖出 OleDbHelper.ConnectionString
,其实也很简单,在 CLR via C#
第四章中关于对象类型和类型对象的解读有这么一张图,很经典。
从上图中可以看到,静态字段是在 Manager 类型对象
中,实例字段都是在 Manager 对象
中,对照这张图,我只需要通过 windbg 找到 OleDbHelper 类型对象
,也就是所谓的 EEClass
。