转换 SQL Server DATETIME 时出错...如何保持日期不变?

Posted

技术标签:

【中文标题】转换 SQL Server DATETIME 时出错...如何保持日期不变?【英文标题】:Error converting SQL Server DATETIME... How do I keep the date the same? 【发布时间】:2021-01-24 21:01:40 【问题描述】:

我的存储过程中有以下数据:

我这样查询解析和保存数据...

private StringBuilder GetDataFromStoredProc(string connectionString, string storedProcName)

        StringBuilder sb = new StringBuilder();

        try
        
            using (var sqlCon = new SqlConnection(connectionString))
            
                using (SqlCommand cmd = new SqlCommand(storedProcName, sqlCon))
                
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandTimeout = 300; // five minutes default

                    sqlCon.Open();

                    using (SqlDataReader reader = cmd.ExecuteReader())
                    
                        //Get All column 
                        var columnNames = Enumerable.Range(0, reader.FieldCount)
                                                .Select(reader.GetName)
                                                .ToList();

                        // Create headers
                        sb.Append(string.Join("|", columnNames));

                        // Append Line
                        sb.AppendLine();

                        while (reader.Read())
                        
                            for (int i = 0; i < reader.FieldCount; i++)
                            
                                string value = reader[i].ToString();
                                sb.Append(value.Replace(Environment.NewLine, " ") + "|");
                            

                            sb.Length--; // Remove the last comma
                            sb.AppendLine();
                        
                    
                
            
        
        catch (Exception ex)
        
            throw ex;
        

        return sb;

...Plan_Start_Date 列中的值以某种方式显示为MM/DD/YYYY 格式...

右侧是上述代码针对数据库的结果,左侧是当前进程使用 SSIS 包解决此问题的结果...

我需要使用一些特殊的转换器或标志,以便我的日期不会以这种方式转换吗?

【问题讨论】:

您在这里只标记了t-sql,但是,您显示的唯一代码是C#;你到底想在这里做什么? 架构中列的实际数据类型是什么?是datetime 吗?如果是这样,您应该能够使用 c# ado.net 和 .net 类型 DateTime 对其进行读取和写入。除了在 UI(表示层)中为最终用户显示某些内容外,您永远不应转换为字符串或从字符串转换。另见SqlDataReader.GetDateTime 这就是reader.ToString() 所做的。传递格式字符串。 For the 1024 time – DateTime has no format! 附带说明永远不要使用throw ex; 重新抛出异常,只需写throw;。这样做将保留异常的堆栈跟踪,而 throw ex; 将堆栈跟踪重置到您尝试重新抛出的点。 【参考方案1】:

解决了...

评估列的数据类型,剩下的就是历史......

【讨论】:

【参考方案2】:

检查您计算机的区域设置及其日期和时间格式。

当您读取日期时间字段时,它的显示格式服从您计算机的区域设置。您的计算机意味着您正在编程的客户端和服务器,托管您的 Web 应用程序。

【讨论】:

以上是关于转换 SQL Server DATETIME 时出错...如何保持日期不变?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server 中将字符串转换为日期时间?

SQL 将expression 转换为数据类型 datetime 时出现算术溢出错误

无法将 DateTime 从 SQL Server 转换为 C# DateTime

如何使用 SQL 将 Sql Server DateTime 转换为通用时间

如何将 Sql Server 2008 DateTimeOffset 转换为 DateTime

将 SQL Server DATETIMEOFFSET 转换为 mySQL DateTime