0

如何将 C# DateTime 变量的格式从转换d/M/yyyy HH:mm:ssyyyy/M/d HH:mm:ss
我不想更改字符串输出,而是更改 DateTime 变量本身。

我有一个带有@date日期时间参数的存储过程。现在我试图将一个 DateTime 变量Today从 C# 传递给这个存储过程。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 中得到的错误: Specified cast is not valid。

堆栈跟踪:

[InvalidCastException:指定的转换无效。]
System.Data.SqlClient.SqlBuffer.get_Int32() +5002837
System.Data.SqlClient.SqlDataReader.GetInt32(Int32 i) +38
Read_SP_SalesPriceResult(ObjectMaterializer 2.MoveNext() +32 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 数据)+1281 ) +1477
System.Data.Linq.SqlClient.ObjectReader





System.Web.UI.DataSourceView.Select(DataSourceSelectArguments 参数,DataSourceViewSelectCallback 回调) +33
System.Web.UI.WebControls.DataBoundControl.PerformSelect() +143
System.Web.UI.WebControls.ListView.PerformSelect() +113
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() +102
System.Web.UI.Control.PreRenderRecursiveInternal() +42
System.Web.UI.Control.PreRenderRecursiveInternal() +175
System.Web.UI.Control.PreRenderRecursiveInternal() +175
System.Web.UI.Control.PreRenderRecursiveInternal() +175
System.Web.UI.Control.PreRenderRecursiveInternal() +175
System.Web.UI.Page.ProcessRequestMain(布尔型 includeStagesBeforeAsyncPoint,布尔型 includeStagesAfterAsyncPoint)+2496

4

3 回答 3

5

DateTime 由于 a没有格式,您所要求的内容是不可能的。

格式是 a 的字符串表示形式DateTime

存储过程应该使用一个DATETIME参数@date- 如果不是,那么你做错了什么。

如果您使用的是 aNVARCHAR或此类类型,则需要在添加参数值之前以正确的格式在 C# 中ToString调用。DateTime

于 2012-11-14T15:11:32.037 回答
2

你不能 - 如何DateTime存储的内部结构不是可以改变的。它实际上是自给定日期以来的“滴答声”数量。

时间值以 100 纳秒为单位,称为滴答声,特定日期是公历中自 0001 年 1 月 1 日午夜 12:00 以来的滴答声数(不包括闰秒添加的滴答声) . 例如,刻度值 31241376000000000L 表示日期,即 0100 年 1 月 1 日星期五午夜 12:00:00。

如果您必须将其作为字符串而不是 a传递,datetime则应该将其转换并将其ToString("yyyy/M/d HH:mm:ss")传递给您的参数。根据您在问题中所说的,这几乎肯定是现在内部发生的事情,仅使用默认ToString()格式。

于 2012-11-14T15:13:11.237 回答
1

正如其他人所说,aDateTime没有“格式”,在 .NET 或 T-SQL 中都没有。DateTime是一种强烈表示日期和时间的 .NET 类型。

无论您在做什么,请确保日期的存储过程参数是 T-SQL 类型datetime(或其朋友之一),而不是varchar或类似的。

于 2012-11-14T15:15:13.313 回答