C# 将varchar数据类型转换为datetime数据类型时出错,导致值超出范围
我正在将日期插入数据库,我得到了这个错误 将C# 将varchar数据类型转换为datetime数据类型时出错,导致值超出范围,c#,sql-server,datetime,C#,Sql Server,Datetime,我正在将日期插入数据库,我得到了这个错误 将varchar数据类型转换为datetime数据类型导致值超出范围 我的数据库就像 column datatype ----------------- id int date datetime 我当前的日期格式是DD/MM/YYYY。但它没有接受。当我将格式(在系统日历中进行了更改,而不是在编程中)更改为YYYY/DD/MM时,它可以工作 为什么上面的格式不起作用 我的问题是 cmd = new SqlCommand("ins
varchar
数据类型转换为datetime
数据类型导致值超出范围
我的数据库就像
column datatype
-----------------
id int
date datetime
我当前的日期格式是DD/MM/YYYY
。但它没有接受。当我将格式(在系统日历中进行了更改,而不是在编程中)更改为YYYY/DD/MM
时,它可以工作
为什么上面的格式不起作用
我的问题是
cmd = new SqlCommand("insert into tblnewaccount values ('" + id + "','" + dateTimePicker1.Text + "')", con);
cmd.ExecuteNonQuery();
它不起作用,因为它将被识别为
字符串
,而不是有效的日期时间
对象值。您可以尝试将其转换为有效的日期时间格式,以便它能够识别它。此外,您可以像现在显示的那样,将文本
值显示为dd/MM/yyyy,但如果查询提供了正确的日期时间格式,则在查询中传递值
参数
还可以查看从字符串到日期时间的转换。在这种情况下,这会给你一个清晰的想法
希望这有帮助
为什么上面的格式不起作用
老实说,我不在乎,你也不应该。因为你在这里做了一些非常错误的事情,而不是使用正确的格式
您尝试将值及其字符串
表示形式保存在键入的列中。您应该始终为您的值选择正确的数据类型
DateTimePicker
的Text
属性,而是使用DateTime
获取值。你应该经常使用。这种类型的字符串连接对攻击是开放的
您应该使用参数化查询,了解sql注入
using(var con = new SqlConnection(conString))
using(var cmd = con.CreateCommand())
{
cmd.CommandText = @"insert into tblnewaccount
values (@id, @date)";
cmd.Parameters.Add("@id", SqlDbType.Int).Value = id;
cmd.Parameters.Add("@date", SqlDbType.DateTime).Value = dateTimePicker1.Value;
con.Open();
cmd.ExecuteNonQuery();
}