加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Empty Textbox仍然在SQL Server中保存数据,即使表中的列也

发布时间:2020-12-15 20:53:57 所属栏目:百科 来源:网络整理
导读:我正面临这个问题,当我在所有文本框都为空时单击“保存”按钮时,它会在所有文本框上显示星标.当我填写最后一个文本框而其他所有文本框都为空时,它会将数据保存到空字符串数据库中 我该如何处理这个问题? if (tbIDCardNum.Text.Trim() == ""){ lblStarIDCard
我正面临这个问题,当我在所有文本框都为空时单击“保存”按钮时,它会在所有文本框上显示星标.当我填写最后一个文本框而其他所有文本框都为空时,它会将数据保存到空字符串数据库中

我该如何处理这个问题?

if (tbIDCardNum.Text.Trim() == "")
{
    lblStarIDCardNum.Visibility = Visibility.Visible;
}

if (tbFirstName.Text.Trim() == "")
{
    lblStarFirstName.Visibility = Visibility.Visible;
}

if (rbMale.IsChecked == false && rbFemale.IsChecked == false)
{
    lblStarGender.Visibility = Visibility.Visible;
}

if (tbDOB.Text == "")
{
    lblStarDOB.Visibility = Visibility.Visible;
}

if (tbDateOfJoining.Text == "")
{
    lblStarDOJ.Visibility = Visibility.Visible;
}

if (tbEducation.Text.Trim() == "")
{
    lblStarEducation.Visibility = Visibility.Visible;
}

if (tbCNIC.Text.Trim() == "")
{
    lblStarCNIC.Visibility = Visibility.Visible;
}

if (tbSalary.Text.Trim() == "")
{
    lblStarSalary.Visibility = Visibility.Visible;
}

if (tbAddress.Text.Trim() == "")
{
    lblStarAddress.Visibility = Visibility.Visible;
}

if (tbEmail.Text.Trim() == "")
{
    lblStarEmail.Visibility = Visibility.Visible;
}

if (tbContact1.Text.Trim() == "")
{
    lblStarContact.Visibility = Visibility.Visible;
}
else
{
    try
    {
        conn.Open();

        cmd.CommandText = "insert into teacher (tIDCardNum,tFirstName,tLastName,tGender,tDOB,tCNIC,tEducation,tSalary,tJoinedOn,tAddress,tEmail,tContact1,tContact2,tContact3,tStatus) values ('" + tbIDCardNum.Text.Trim() + "','" + tbFirstName.Text.Trim() + "','" + tbLastName.Text.Trim() + "','" + gender + "','" + tbDOB.Text + "','" + tbCNIC.Text + "','" + tbEducation.Text + "','" + tbSalary.Text.Trim() + "','" + tbDateOfJoining.Text.Trim() + "','" + tbAddress.Text.Trim() + "','" + tbEmail.Text + "','" + tbContact1.Text + "','" + tbContact2.Text + "','" + tbContact3.Text + "',1)";

        cmd.Connection = conn;
        cmd.ExecuteNonQuery();

        cmd.Clone();
        conn.Close();

        HideStars();
        Refresh();

        MessageBox.Show("Saved");
   }
   catch (Exception ex)
   {
       if (ex.Message.Contains("Violation of PRIMARY KEY constraint "))
       {
           conn.Close();
           MessageBox.Show(ex.Message);
       }
       else
       {
           MessageBox.Show(ex.Message);
       }
   }
}

解决方法

正如我所理解的那样,似乎主要问题是你检查不同if语句中的所有字段,但只有最后一个有其他字段.正如我从你的帖子中假设的那样,这是你的问题;你想让每个文本框都有一个值,然后才开始在数据库中插入它,对吗?

如果将代码分解成更可重用的东西,偶然清理一些东西,可以更好地解释这一点.

首先,首先在类中引入一个变量,我们可以使用它来查看是否有空字段:

private bool HasEmptyFields = false;

接下来,让我们创建一个简单的帮助器,检查文??本框是否为空/ null,更新相应标签的visiblity状态,如果确实为空则将’HasEmptyFields’设置为true:

private void ValidateField(TextBox textBox,Label label) {

    // check if the textbox actually is null - or empty (""),which is a difference
    // the nifty helper string.IsNullOrEmpty() will help with that
    var fieldIsEmpty = string.IsNullOrEmpty(textBox.Text.Trim());

    // next,based on if the field is empty,set the visibility of the label
    // don't worry,this is fancy syntax for a simple if...then...else
    label.Visibility = fieldIsEmpty ? Visibility.Visible : Visibility.Hidden;

    if (fieldIsEmpty) {
        // ONLY if this field is actually null,or empty,we make sure to 
        // inform the rest of the code this occ
        HasEmptyFields = true;
    }
}

有了这个,我们可以做一些事情:

ValidateField(tbIDCardNum,lblStarIDCardNum);
ValidateField(tbFirstName,lblStarFirstName);
// etc... continue doing this for all you fields

if (HasEmptyFields) {
    // ONLY if there is any field detected as being empty/null
    // we simply stop here (and skip the insert-into-db stuff)
    return;
} 

try 
{
    // if all fields indeed have a value,let's
    // continue with the insert-into-db stuff here

    conn.Open();
    ...
}

现在有一些方法可以让它变得更漂亮.但这可能会帮助你朝着正确的方向前进.另外值得一提的是其他一些注释,比如阻止SQL injection(必然会发生),以及查看数据验证工具,这样您就不必自己编写所有这些验证代码.但显然,这不在这个答案的范围内.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读