转换 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 将expression 转换为数据类型 datetime 时出现算术溢出错误
无法将 DateTime 从 SQL Server 转换为 C# DateTime
如何使用 SQL 将 Sql Server DateTime 转换为通用时间