【发布时间】:2013-06-06 07:20:33
【问题描述】:
我正在开发一个 C# 控制台应用程序项目。尝试将 DateTime 值插入 SQL Server 2008 并且效果很好。如果我的代码失败,我想将 default DateTime 插入到数据库中的表中。
当我尝试插入时出现错误。
SqlTypeException 未处理:
SqlDateTime 溢出。必须在 1753 年 1 月 1 日凌晨 12:00:00 到 9999 年 12 月 31 日晚上 11:59:59 之间。
下面我已经粘贴了具体代码。
try
{
...
return DateTime.Now;
}
catch (WebException ex)
{
...
return default(DateTime);
}
我用来在 LOGS 表中插入详细信息的代码:
connection.Open();
for (int i = 0; i < LogList.Count; i++)
{
string aprocessLogQuery = "INSERT INTO PROCESS_LOGS VALUES (@fileId, @startTime, @endTime, @transferredTime)";
command = new SqlCommand(aprocessLogQuery, connection);
command.Parameters.Add("fileId", SqlDbType.Int).Value = LogList[i].fileId;
command.Parameters.Add("startTime", SqlDbType.DateTime).Value = LogList[i].fileGeneration_StartDateTime;
command.Parameters.Add("endTime", SqlDbType.DateTime).Value = LogList[i].fileGeneration_EndDateTime;
command.Parameters.Add("transferredTime", SqlDbType.DateTime).Value = LogList[i].fileTransferred_DateTime;
dataReader.Close();
dataReader = command.ExecuteReader();
}
connection.Close();
DateTime 的默认值为01/01/0001 12:00:00 AM,因此它不起作用。任何人都可以建议替代工作解决方案吗?
谢谢
【问题讨论】:
-
你应该使用datetime2 datatype
-
最好使用 SqlParameter 而不是字符串。每当我看到一个字符串查询时,我就看到了 SQL 注入的风险......
-
看看this question:它说插入
nulldatetime 会在数据库中给出默认值。 -
@V4Vendetta 感谢您介绍 datetime2。但很抱歉,我无权更改 SQL Server 中的数据类型。
-
DATETIME在 SQL Server 中不支持 1753 年之前的日期 - 因此,如果您无法将 SQL Server 数据类型更改为DATETIME2(它将支持01/01/0001),那么您需要将您的 .NET 代码更改为默认返回01/01/1900或类似的东西
标签: c# sql-server datetime default sqlexception