0

d/M/yyyy HH:mm:ssC# の DateTime 変数の形式を からに変換するにはどうすればよいですか?yyyy/M/d HH:mm:ss
文字列出力を変更したくはありませんが、DateTime 変数自体は変更したくありません。

@datedatetimeにパラメーターを持つストアド プロシージャがあります。今Today、C# からこのストアド プロシージャに DateTime 変数を渡そうとしています。C# の DateTime 変数は format にありますd/M/yyyy HH:mm:ssが、ストアド プロシージャには format が必要です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(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
システム。 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(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2496

4

3 に答える 3

5

DateTime a に format がないという単純な理由で、あなたが求めていることは不可能です。

フォーマットは、 の文字列表現ですDateTime

ストアド プロシージャはDATETIMEパラメータを取得する必要があり@dateます。そうでない場合は、何か問題があります。

またはそのような型を使用している場合は、パラメーター値を追加する前に、正しい形式で C#NVARCHARを呼び出す必要がありToStringます。DateTime

于 2012-11-14T15:11:32.037 に答える
2

できません-保存方法の内部はDateTime変更できるものではありません。実際には、特定の日付からの「ティック」の数だけです。

時間の値は、ティックと呼ばれる 100 ナノ秒単位で測定されます。特定の日付は、グレゴリオ暦の西暦 0001 年 1 月 1 日 (CE) 午前 12 時以降のティック数です (閏秒によって追加されるティックを除く)。 . たとえば、31241376000000000L の ticks 値は、日付、0100 年 1 月 1 日金曜日 12:00:00 午前 0 時を表します。

ではなく文字列として渡す必要がある場合は、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(またはその仲間の 1 つ) であり、varchar類似していないことを確認してください。

于 2012-11-14T15:15:13.313 に答える