我有两个文本框并包含日期。我想将文本转换为日期并将其插入SQL数据库。如果用户未输入日期,则会发生错误。如何防止错误发生?
try
{
DateTime abc,bsd;
abc = Convert.ToDateTime(textBox1.Text);
bsd = Convert.ToDateTime(textBox2.Text);
SqlConnection con = new SqlConnection();
con.ConnectionString = Scout_DHQ_Manager.Properties.Settings.Default.constring;
con.Open();
SqlCommand cmd;
cmd = new SqlCommand("INSERT INTO Table1 (dt,dt2) VALUES('"+abc +"','"+bsd+"')", con);
cmd.ExecuteNonQuery();
MessageBox.Show("Details of a new unit is successfully added", " Successfully Added", MessageBoxButtons.OK, MessageBoxIcon.Information);
con.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), "Erroe Occure in Connection.", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
答案 0 :(得分:3)
您应该对输入进行某种验证。如果它看起来不像日期,则抛出错误。
您可以使用DateTime.TryParse()。
DateTime date = new DateTime();
if(DateTime.TryParse(textBox1.Text, out date))
{
//The text is a valid date
//Insert it
}
如果您需要特定格式,可以使用DateTime.TryParseExact()。
您也可以考虑使用parametrized queries,因为编写这样的代码会让您容易受到SQL注入攻击。
答案 1 :(得分:2)
有些观点:
abc
和bsd
变量的类型为Nullable<DateTime>
(或DateTime?
,且相同)。Convert.ToDateTime
:empty textbox = null date。答案 2 :(得分:1)
更改以下代码
DateTime? abc, bsd;
if (textBox1.Text != "")
abc = Convert.ToDateTime(textBox1.Text);
else
abc = null;
if (textBox2.Text != "")
bsd = Convert.ToDateTime(textBox2.Text);
else
bsd = null;
答案 3 :(得分:1)
记住这些事情:
考虑到上述尝试:
try
{
string date1=textBox1.Text;
string date2= textBox2.Text;
if (date1!=null)&&((date2!=null)
{
date1=DateTime.TryParse(date1).ToString("yyyy/MM/dd HH:mm:ss.fff");
date2=DateTime.TryParse(date2).ToString("yyyy/MM/dd HH:mm:ss.fff");
SqlConnection con = new SqlConnection();
using (con)
{
con.ConnectionString = Scout_DHQ_Manager.Properties.Settings.Default.constring;
con.Open();
SqlCommand cmd;
cmd = new SqlCommand("INSERT INTO Table1 (dt,dt2) VALUES(@dt1,@dt2)", con);
cmd.Parameters.AddWithValue("@dt1", date1);
cmd.Parameters.AddWithValue("@dt2", date2);
cmd.ExecuteNonQuery();
}
}
else
{
MessageBox.Show("Please Fill in both Textboxes");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), "Erroe Occure in Connection.", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
编辑:
将textBox改为DateTimePicker
控件可能会导致更好的功能(你永远不会有空值)如果你在你可以在你的参数中设置的else块中坚持使用textBoxes:
parameter.Value = DBNull.Value;