在SQL Server中插入日期值并使用c#将其检索到文本框中

时间:2014-08-04 11:57:16

标签: c# sql-server windows c#-3.0

我正在尝试将日期值从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);
        }

插入数据库是成功的,但检索对我来说是个噩梦......

1 个答案:

答案 0 :(得分:2)

  1. 不要使用连接将数据放入SQL命令:使用参数。

    否则您将受到SQL注入。

  2. 如果您的数据库列具有合适的类型(例如DateTime2),那么没有点转换为字符串并返回,它将以正确的类型出现:

    SqlDataReader dr = ad.ExecuteReader();
    dr.Read();
    while (dr.HasRows) {
      textBox2.Text = dr.GetDateTime(1).ToString(/* Pass suitable format and CultureInfo */);
      …
    }
    
  3. <强> 修改

    重新阅读你的代码我发现了这个:

    private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
    {
        dateTimePicker1.Text = DateTime.Now.ToShortDateString();
        textBox1.Text = dateTimePicker1.Text;
    }
    

    每次其值更改时似乎都会重置dateTimePicker1。如果我没记错,设置值会触发事件:无限循环。但它似乎没有意义:你想初始化表单加载而不是更改吗?