0

我正在开发一个 C# 控制台应用程序项目。尝试在DateTimeSQL Server 2008 中插入一个值,效果很好。如果我的代码失败,我想将默认值 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();

的默认值为DateTime01/01/0001 12:00:00 AM因此它不起作用。任何人都可以建议替代工作解决方案吗?

谢谢

4

4 回答 4

4

另一种替代解决方案是您可以通过构建扩展方法来解决,如下所示:

public static class DateTimeExtension
{
    public static DateTime DefaultSqlDateTime(this DateTime dateTime)
    {
       return new DateTime(1753, 1, 1, 12, 0, 0);
    }
}

而不是return default(DateTime)你可以使用变量 dateTimereturn dateTime.DefaultSqlDateTime;

编辑: 如何使用扩展方法:

例如:return default(DateTime).GetDefaultSqlDateTime();

或者

DateTime dateTime = ...
return dateTime.GetDefaultSqlDateTime();
于 2013-06-06T07:34:11.467 回答
3

在数据库中,未知日期用NULL值表示。你可以像这样插入:

command.Parameters.AddWithValue("@startTime", DBNull.Value);

(据我所知,需要在参数前加上@.)

于 2013-06-06T07:32:41.210 回答
0

我在我的实用程序中使用此功能而不是常规 TryParse

public static bool TryParseSqlDateTime(string someval, DateTimeFormatInfo dateTimeFormats, out DateTime tryDate)
    {
        bool valid = false;
        tryDate = (DateTime)System.Data.SqlTypes.SqlDateTime.MinValue;
        System.Data.SqlTypes.SqlDateTime sdt;
        if (DateTime.TryParse(someval, dateTimeFormats, DateTimeStyles.None, out tryDate))
        {
            try
            {
                sdt = new System.Data.SqlTypes.SqlDateTime(tryDate);
                valid = true;
            }
            catch (System.Data.SqlTypes.SqlTypeException ex)
            {


            }
        }

        ret
于 2014-09-02T10:32:09.833 回答
0

您可以使用它,这将返回 SQL 将接受的最小日期值。此方法在 .Net 中返回 DateTime。

System.Data.SqlTypes.SqlDateTime.MinValue.Value
于 2021-03-24T10:01:08.050 回答