繁体   English   中英

C#datetimepicker到SQL Server中的日期

[英]C# datetimepicker to date in SQL Server

每当我尝试在C#应用程序中更改DateTimePicker值时,如果不更改该值,程序都会成功运行,我会遇到异常-有什么想法吗?

例外情况:

System.Data.dll中发生了类型为'System.Data.SqlClient.SqlException'的未处理的异常

附加信息:从字符串转换日期和/或时间时转换失败。

C#代码:

private void button8_Click(object sender, EventArgs e)
{
    // SqlConnection cnx = new SqlConnection("Data Source=TDI11-PC\\SQLEXPRESS;Initial Catalog=mjhd;Integrated Security=True");
    String req = "insert into dommage_materiel values('" + textBox1.Text +"','" + richTextBox2.Text+ "','" + richTextBox1.Text +"','" + textBox3.Text + "','" +dateTimePicker1.Value+"','" + richTextBox3.Text + "','" + textBox2.Text + "','" + textBox4.Text.ToString()+"','" + textBox5.Text.ToString()+"')";

    SqlCommand cmd = new SqlCommand(req, cnx);

    cnx.Open();
    cmd.ExecuteNonQuery();
    cnx.Close();
}

我尝试了这种方法无济于事:

DateTime.Parse(dateTimePicker1.Value.ToString());

Convert.ToDateTime(dateTimePicker1.Value.ToString());

注意:SQL Server列的数据类型为Date

为什么不尝试传递参数? 这样,您还可以指定参数类型。 仅举一个例子:

SqlCommand command = new SqlCommand(commandText, connection);
command.Parameters.Add("@dateParamter", SqlDbType.Date);
command.Parameters["@dateParamter"].Value = dateTimePicker1.Value;

您可以在此处阅读有关此内容的更多信息: 如何:执行参数化查询

另外,如上所述的dynamic SQL易于SQL injection Parameterised SQL至少是学习如何防止它们的一个很好的起点。

有关更多信息,您可以阅读Jeff Atwood的文章给我参数化的SQL,或者让我死亡

只是借用上述文章的底线:

Parameterised SQL具有以下纯性能优势:

  • 更少的字符串串联
  • 无需担心任何类型的手动字符串转义
  • 一个更通用的查询形式呈现给db,因此它可能已经散列并存储为预编译的执行计划
  • 较小的弦通过电线发送

非参数化SQL是数据库编程的GoTo语句。 不要这样做,并确保您的同事也不要这样做。

希望这可以帮助!!!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM