【问题标题】:C# datetimepicker to date in SQL ServerC# datetimepicker 到 SQL Server 中的日期
【发布时间】:2016-03-09 05:37:03
【问题描述】:

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

例外:

“System.Data.SqlClient.SqlException”类型的未处理异常 发生在 System.Data.dll

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

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

【问题讨论】:

  • SQL Injection alert - 您应该将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入

标签: c# sql-server ado.net


【解决方案1】:

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

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

您可以在此处阅读更多信息:How to: Execute a Parameterized Query

另外,上面的dynamic SQL 容易出现SQL injectionParameterised SQL 至少是学习预防它们的良好起点。

更多信息可以阅读Jeff Atwood的文章Give me parameterized SQL, or give me death

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

Parameterised SQL 提供以下纯粹的性能优势:

  • 更少的字符串连接
  • 无需担心任何类型的手动字符串转义
  • 向 db 提供了一个更通用的查询表单,因此它可能已经经过哈希处理并存储为预编译的执行计划
  • 通过网络发送较小的字符串

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

希望对你有帮助!!!

【讨论】:

  • 谢谢,帮助很大,但问题仍然存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-22
  • 1970-01-01
相关资源
最近更新 更多