我正在尝试将日期值从datetimepicker插入到sql server数据库中,并使用select命令将其检索到文本框中。我使用c#作为前端语言。请为我修复此问题。 这是我写的代码。
private void save_Click(object sender, EventArgs e)
{
try
{
SqlCommand cmd = new SqlCommand("insert into xt1 values('" + textBox1.Text + "'," + int.Parse(textBox2.Text) + ")", cnn);
cnn.Open();
cmd.ExecuteNonQuery();
MessageBox.Show("saved");
cnn.Close();
}
catch (Exception x)
{
MessageBox.Show(x.Message);
cnn.Close();
}
}
private void button3_Click(object sender, EventArgs e)
{
this.Dispose();
}
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
dateTimePicker1.Text = DateTime.Now.ToShortDateString();
textBox1.Text = dateTimePicker1.Text;
}
private void button2_Click(object sender, EventArgs e)
{
try
{
cnn.Open();
SqlCommand ad = new SqlCommand ("select * from xt1 where id=" + int.Parse(textBox2.Text), cnn);
SqlDataReader dr = ad.ExecuteReader();
dr.Read();
while (dr.HasRows)
{
textBox1.Text = dr[0].ToString();
textBox2.Text = DateTime .Parse ( dr[1].ToString());
}
cnn.Close();
}
catch (Exception x)
{
MessageBox.Show(x.Message);
}
插入数据库是成功的,但检索对我来说是个噩梦......
答案 0 :(得分:2)
不要使用连接将数据放入SQL命令:使用参数。
否则您将受到SQL注入。
如果您的数据库列具有合适的类型(例如DateTime2
),那么没有点转换为字符串并返回,它将以正确的类型出现:
SqlDataReader dr = ad.ExecuteReader();
dr.Read();
while (dr.HasRows) {
textBox2.Text = dr.GetDateTime(1).ToString(/* Pass suitable format and CultureInfo */);
…
}
<强> 修改 强>
重新阅读你的代码我发现了这个:
private void dateTimePicker1_ValueChanged(object sender, EventArgs e) { dateTimePicker1.Text = DateTime.Now.ToShortDateString(); textBox1.Text = dateTimePicker1.Text; }
每次其值更改时似乎都会重置dateTimePicker1
。如果我没记错,设置值会触发事件:无限循环。但它似乎没有意义:你想初始化表单加载而不是更改吗?