如何将C#DateTime变量的格式从d/M/yyyy HH:mm:ss
转换为yyyy/M/d HH:mm:ss
我不想更改字符串输出,而是更改DateTime变量本身。
我在datetime中有一个带参数@date
的存储过程。
现在我尝试将C#中的DateTime变量Today
传递给此存储过程。
C#DateTime变量的格式为d/M/yyyy HH:mm:ss
,但存储过程需要格式yyyy/M/d HH:mm:ss
。
我尝试使用LINQ to SQL: 代码:
public static object SP_SelectSalesPriceItem()
{
var query = dc.SP_SalesPrice(DateTime.Now);
return query;
}
存储过程:
ALTER PROCEDURE [dbo].[SP_SalesPrice]
@Date datetime
AS
BEGIN
SET NOCOUNT ON;
select SalesPrice.[Item No_]
from Sales Price
where [Starting Date] < @Date and ([Ending Date] > @Date
这是我在asp.net中遇到的错误: 指定演员无效。
堆栈追踪:
[InvalidCastException:指定的演员表无效。]
System.Data.SqlClient.SqlBuffer.get_Int32()+ 5002837
System.Data.SqlClient.SqlDataReader.GetInt32(Int32 i)+38
Read_SP_SalesPriceResult(ObjectMaterializer1 ) +1477
2.MoveNext()+32
System.Data.Linq.SqlClient.ObjectReader
System.Web.UI.WebControls.ListView.CreateItemsWithoutGroups(ListViewPagedDataSource dataSource,Boolean dataBinding,InsertItemPosition insertPosition, ArrayList keyArray)+222
System.Web.UI.WebControls.ListView.CreateChildControls(IEnumerable的 dataSource,Boolean dataBinding)+1040
System.Web.UI.WebControls.ListView.PerformDataBinding(IEnumerable的 数据)+44
System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable的 数据)+128
System.Web.UI.DataSourceView.Select(DataSourceSelectArguments 参数,DataSourceViewSelectCallback回调)+33
System.Web.UI.WebControls.DataBoundControl.PerformSelect()+ 143 3 System.Web.UI.WebControls.ListView.PerformSelect()+ 113 3 System.Web.UI.WebControls.BaseDataBoundControl.DataBind()+74
System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound()+66
System.Web.UI.WebControls.ListView.CreateChildControls()+55
System.Web.UI.Control.EnsureChildControls()+ 0102 System.Web.UI.Control.PreRenderRecursiveInternal()+42
System.Web.UI.Control.PreRenderRecursiveInternal()+ 1755 System.Web.UI.Control.PreRenderRecursiveInternal()+ 1755 System.Web.UI.Control.PreRenderRecursiveInternal()+ 1755 System.Web.UI.Control.PreRenderRecursiveInternal()+ 1755 System.Web.UI.Page.ProcessRequestMain(布尔 includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint) 2496
答案 0 :(得分:4)
由于DateTime
没有格式的简单原因,您无法提出要求。
格式是DateTime
的字符串表示。
存储过程应该为DATETIME
采用@date
参数 - 如果不是,则表示您做错了。
如果您使用的是NVARCHAR
或此类型,则需要在添加参数值之前使用正确的格式在C#中的ToString
上调用DateTime
。
答案 1 :(得分:1)
你不能 - 存储DateTime
的方式的内部不是可以改变的东西。实际上它只是给定日期以来的“滴答”数量。
时间值以称为刻度线的100纳秒单位测量,特定日期是格里高利历日历中自公元0001年1月1日午夜12:00起的刻度数(不包括将添加的刻度)闰秒)。例如,刻度值31241376000000000L表示日期,星期五,1月1日,0100 12:00:00午夜。
如果您必须将其作为字符串而不是datetime
传递,则应将其转换为ToString("yyyy/M/d HH:mm:ss")
并将其传递给您的参数。根据您在问题中所说的内容,只有默认的ToString()
格式,这几乎可以肯定是内部正在发生的事情。
答案 2 :(得分:1)
正如其他人所说,DateTime
没有“格式”,无论是在.NET还是在T-SQL中。 DateTime
是一种强类型日期和时间的.NET类型。
无论您正在做什么,请确保日期的存储过程参数是T-SQL类型datetime
(或其中一个朋友),而不是varchar
或类似。