【发布时间】:2019-06-25 15:17:14
【问题描述】:
我正在通过我的 ASP.NET MVC 项目中的控制器将数据插入到 SQL Server 表中。我需要知道如何将 DateTime 格式化为字符串,以便 SQL Server 正确显示它。
这是我正在使用的代码
var queryable = ((IQueryable<PoScenarioQueueManager>)filters.ApplyTo(query)).ApplyCustomFilters();
var sql = queryable.ToParameterizedQuery();
var declaration = sql.Substring(0, sql.IndexOf("SELECT", StringComparison.CurrentCultureIgnoreCase));
var select = sql.Replace(declaration, "");
var statement = "@Declaration " +
"INSERT INTO dbo.ScenarioQueues (ScenarioUserId, ScenarioTypeId, ScenarioId" +
", VendorNumber, VendorName, DepartmentNumber, DepartmentName, AuditReleaseId, ItemId, ItemNumber" +
", ItemUpc, BeginDate, EndDate, PaidCost, NewCost, ImportItemsFilePath" +
", ExportItemsFilePath, ScenarioSource, CreatedBy, ModifiedBy" +
", CreatedDate, ModifiedDate, PoEvent, PoEventId, CheckStartDate, CheckEndDate)" +
"SELECT ScenarioUserId, ScenarioTypeId, ScenarioId, VendorNumber, VendorName" +
", DepartmentNumber, DepartmentName, AuditReleaseId, ItemId, ItemNumber, ItemUpc" +
", BeginDate, EndDate, PaidCost, NewCost, ImportItemsFilePath, ExportItemsFilePath" +
", ScenarioSource, CreatedBy, ModifiedBy, CreatedDate, ModifiedDate, PoEvent" +
", PoEventId, "+currentAuditstartDate.ToString("yyyy-MM-dd") + ", "+currentAuditendDate.ToString("yyyy-MM-dd")+
" FROM ( @Select ) As QUERY";
using (SqlConnection connection = new SqlConnection(entities.Database.Connection.ConnectionString))
{
SqlCommand command = new SqlCommand(statement.Replace("@Declaration", declaration).Replace("@Select", select), connection);
command.Connection.Open();
command.ExecuteNonQuery();
}
SQL Server 中的表未显示正确的DateTime 格式。 currentAuditstartDate 和 currentAuditendDate 没有正确传递,以便 SQL Server 显示正确的 DateTime 格式。
【问题讨论】:
-
你应该参数化你的语句,而不是注入值。日期和时间数据类型没有“格式”,它们存储为二进制值。如何显示值取决于表示层,而不是 SQL Server,
-
快速回答 - 'yyyyMMdd'(单引号)例如 '20020911' 是 ISO 格式 - 非常可靠
-
另外,正如你现在写的,Sql Server 看到的是减法运算,而不是日期 2019-06-25 = 1988
-
以DB<>fiddle 为例。每个字符串文字都是不同的,但是,每个值的最终结果都是相同的。在这种情况下,DB Fiddle 选择使用
dd/MM/yyyy hh:mm:ss的显示格式(对我来说)。 -
添加到@Steve 的评论中将被视为
datetime1905-06-12 00:00:00.000。
标签: c# asp.net sql-server entity-framework