【发布时间】:2015-10-12 19:11:34
【问题描述】:
我正面临这个问题,当我在所有文本框为空时单击保存按钮时,它会在所有文本框上显示星标。当我填充最后一个文本框而将所有其他文本框留空时,它会将数据保存到带有空字符串的数据库中。
我该如何处理这个问题?
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);
}
}
}
【问题讨论】:
-
空并不意味着“空”。 sql null 是“未知”。空文本框只是一个长度为 0 的字符串 - 这不是未知的。
-
如何让文本框发送 Null。或者检查文本框是否在 seding 空字符串
-
if (length(text_from_textbox) = 0) then sql_value = 'null' -
防止SQL注入,使用CommandParameter代替字符串连接。
-
为什么要使用星标?请改用数据验证控件。如果要检查null,请参考this article
标签: c# sql-server database if-statement null