C# 将SQL Select语句中的DateTime转换为字符串,以在SQL表中设置正确的DateTime格式
我正在通过ASP.NET MVC项目中的控制器将数据插入SQL Server表中。我需要知道如何将日期时间格式化为字符串,以便SQL Server能够正确显示它 这就是我正在使用的代码C# 将SQL Select语句中的DateTime转换为字符串,以在SQL表中设置正确的DateTime格式,c#,asp.net,sql-server,entity-framework,C#,Asp.net,Sql Server,Entity Framework,我正在通过ASP.NET MVC项目中的控制器将数据插入SQL Server表中。我需要知道如何将日期时间格式化为字符串,以便SQL Server能够正确显示它 这就是我正在使用的代码 var queryable = ((IQueryable<PoScenarioQueueManager>)filters.ApplyTo(query)).ApplyCustomFilters(); var sql = queryable.ToParameterizedQuery(); var dec
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();
}
var queryable=((IQueryable)filters.ApplyTo(query)).ApplyCustomFilters();
var sql=queryable.ToParameterizedQuery();
var声明=sql.Substring(0,sql.IndexOf(“SELECT”,StringComparison.CurrentCultureIgnoreCase));
var select=sql.Replace(声明“”);
var语句=“@声明”+
插入到dbo.scenario队列(ScenarioUserId、ScenarioTypeId、ScenarioId)+
,VendorNumber,VendorName,部门编号,部门名称,AuditReleaseId,ItemId,ItemNumber+
,ItemUpc,BeginDate,EndDate,PaidCost,NewCost,ImportItemsFilePath+
,ExportItemsFilePath,ScenarioSource,CreatedBy,ModifiedBy+
,CreatedDate,ModifiedDate,PoEvent,PoEventId,CheckStartDate,CheckEndDate)+
选择ScenarioUserId、ScenarioTypeId、ScenarioId、VendorNumber、VendorName+
,部门编号,部门名称,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”)+
“从(@Select)作为查询”;
使用(SqlConnection=newsqlconnection(entities.Database.connection.ConnectionString))
{
SqlCommand=newsqlcommand(statement.Replace(“@Declaration”,Declaration)。Replace(“@Select”,Select),connection);
command.Connection.Open();
command.ExecuteNonQuery();
}
SQL Server中的表未显示正确的DateTime
格式。currentAuditstartDate
和currentAuditendDate
是SQL Server显示正确日期时间格式时未正确传递的数据。请尝试此操作
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("yyyyMMdd") + "', '" + currentAuditendDate.ToString("yyyyMMdd") +
"' FROM ( @Select ) As QUERY";
“yyyyMMdd”(单引号)例如“20020911”是一种ISO格式-非常可靠您应该对语句进行参数化,而不是注入值。日期和时间数据类型没有“格式”,它们存储为二进制值。如何显示值取决于表示层,而不是SQL Server,快速回答-‘yyyyMMdd’(用单引号括起来),例如‘20020911’是ISO格式,非常可靠。因此,正如您现在编写的,SQL Server看到的是减法运算,而不是日期2019-06-25=1988举个例子。每个字符串文字都是不同的,但是,每个值的最终结果都是相同的。在这种情况下,DB Fiddle选择使用
dd/MM/yyyy hh:MM:ss
的显示格式(对我来说)。要添加到@Steve的注释中,它将被视为日期时间
1905-06-12 00:00:00.000。为什么不正确地参数化查询?那么格式就是字符串,因为数据类型是正确的。@Cato-非常感谢。正是我需要的。