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

C# 在sql server中插入日期值并使用c将其检索到文本框中#,c#,sql-server,windows,c#-3.0,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('" + t

我正在尝试将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);
        }
插入数据库成功,但检索对我来说是一场噩梦

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

    否则,您将受制于SQL注入

  • 如果您的数据库列具有合适的类型(例如),则转换为字符串并返回没有意义,它将被认为是正确的类型:

    SqlDataReader dr = ad.ExecuteReader();
    dr.Read();
    while (dr.HasRows) {
      textBox2.Text = dr.GetDateTime(1).ToString(/* Pass suitable format and CultureInfo */);
      …
    }
    
  • 编辑

    在重新阅读您的代码时,我发现:


    每次其值更改时,似乎都会重置
    日期时间选择器1
    。如果我记得正确设置该值,将触发事件:无限循环。但它似乎也没有意义:您想在表单加载时而不是在更改时进行初始化吗?

    您能说明您遇到了什么错误/异常吗?首先要做的是:停止像那样将值直接放入SQL中。这在很多方面都是不好的做法,最令人担忧的是,你容易受到攻击,但也因为你把日期/时间表示为文本,而没有必要。此外,您还没有告诉我们您给我们的代码有什么问题-“检索是一场噩梦”不是一个明确的问题描述。(您可能只需要转换到
    DateTime
    ,但至少要告诉我们现在出了什么问题。)请更详细地描述您遇到的错误以及它们在代码中发生的位置。作为一个社区,我们在这里测试您的代码,所以请更加精确。使用参数化SQL。始终,无论它是否“只是一个Windows窗体应用程序”。那么您根本不需要担心日期/时间的格式。@user1932583:作为Windows窗体应用程序并不会自动使其安全。您仍然应该使用更好的数据库查询实践。好的,我在sql server中指定了日期作为我的数据类型,在datepicker控件中选择的日期将转到textbox,然后textbox中的文本将保存到数据库中。现在我的问题是我没有将保存的日期保存到textbox中@richard@user1932583代码中没有任何内容这是显而易见的。您是否尝试过调试:在
    按钮2\u单击的开始处设置断点。首先确保正在调用它(您确实设置了事件处理程序?),然后确定它正在做什么(例如,您是否正在获取任何记录?。@user1932583:获取什么?我没有获取任何记录。@user1932583如果在SQL Server Management Studio(或其他类似工具)中运行相同的查询(手动替换id),会发生什么情况:可能您没有预期的数据。
    
    private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
    {
        dateTimePicker1.Text = DateTime.Now.ToShortDateString();
        textBox1.Text = dateTimePicker1.Text;
    }