Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将varchar数据类型转换为datetime数据类型时出错,导致值超出范围_C#_Sql Server_Datetime - Fatal编程技术网

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();
}