একটি ডেটটাইম 2 ডেটা টাইপের রূপান্তরকরণের তারিখের সময় ডেটা টাইপের ফলাফলের সীমার মান হয় না


379

আমি 5 টি কলাম সহ একটি ডেটেবলযোগ্য পেয়েছি, যেখানে একটি সারি ডেটা পূরণ করা হচ্ছে তারপর লেনদেনের মাধ্যমে ডাটাবেসে সংরক্ষণ করা হয়।

সংরক্ষণের সময়, একটি ত্রুটি ফিরে আসে:

একটি ডেটটাইম 2 ডেটা টাইপের রূপান্তরিত হওয়ার ফলে ডেটটাইম ডেটা টাইপের পরিবর্তে সীমার মান হয়

এটি সূচিত হয়েছে, যেমন পড়া হয়েছে, আমার ডেটাটেবলের একটি ধরণের DateTime2এবং আমার ডাটাবেস এ রয়েছে DateTime; এটা ভুল।

তারিখ কলামটি এর DateTimeমতো সেট করা আছে :

new DataColumn("myDate", Type.GetType("System.DateTime"))

প্রশ্ন

এটি কি কোডে সমাধান করা যায় বা ডাটাবেস স্তরে কিছু পরিবর্তন করতে হবে?

উত্তর:


60

কলামটিতে আপনার কী ধরণের তারিখ রয়েছে?

এগুলি সব কি ধরণের পরিসরের মধ্যে খাপ খায়?


একদিকে যেমন, কনস্ট্রাক্টরের Typeজন্য কোনও বস্তু পাওয়ার সঠিক উপায়টি হ'ল মূলশব্দ, যা দ্রুততার মাত্রার অর্ডার।DataColumntypeof

সুতরাং, কলাম তৈরি করতে, আপনার লেখা উচিত

new DataColumn("myDate", typeof(DateTime))

3
আমি আমার ডেটা কলামগুলি পরিবর্তন করেছি এবং এখন টাইপ ব্যবহার করেছি ... আরও আমি আমার সমস্যাটি পেয়েছি। এখানে 1 টি দার্টো রয়েছে যাতে একটি ভুল তারিখ রয়েছে, যা ত্রুটিটিকে ট্রিগার করেছিল
জেরব্র্যান্ড

739

ক্ষেত্রটি NULL মানগুলি গ্রহণ না করে আপনি কোনও ডেটটাইম ক্ষেত্রের জন্য কোনও মান নির্ধারণ না করলে এটি ঘটতে পারে ।

এটা আমার জন্য এটি স্থির!


43
সত্তা ফ্রেমওয়ার্কে আপনি যদি এমন একটি তৈরি কলাম যুক্ত করেন যা শূন্য হয় না, তবে আপনার EDMX আপডেট করুন, যখন আপনি কোডটিতে মান নির্ধারণ করছেন না, যা এই ত্রুটিটি এভাবে ফেলে দিতে পারে
ব্র্যাড থমাস

6
এটা আপনার জন্য কি স্থির? ডিফল্ট মান হিসাবে গেটেডেট () কল সহ একটি ডেটটাইম ক্ষেত্র থাকলে এই ত্রুটিটি উপস্থিত হয়।
ব্যবহারকারী 3046061

15
কেন এনকিউএল যদি আমার এসকিউএল পক্ষের, আমার একটি ডিফল্ট মান = গেটেট () থাকে তবে কেন সত্তা ফ্রেমওয়ার্ক উপেক্ষা করতে পারবেন না?
JoshYates1980

33
আমি যা বিশ্বাস করি এটি হ'ল এনটিটিফ্রেম ওয়ার্কটি একটি ডেটটাইম.মিনভ্যালু দেখতে পায় যা বছর 0001 এবং এসকিউএল-তে ডেটটাইম সীমার মানের বাইরে থাকে, তাই এটি এই মানটিকে একটি ডেটটাইম 2 (যা বছর 0001 সমর্থন করে) মান হিসাবে প্রেরণ করে তাই সন্নিবেশ / আপডেটটি বৈধ, তবে এটি ব্যর্থ হয় যখন এসকিউএল এই ডেটটাইম 2 কে একটি ডেটটাইমে রূপান্তরিত করার চেষ্টা করে কারণ এর ফলে আলাদা মান আসবে। দুটি সমাধান হ'ল: 1 আপনার মডেলটিতে একটি অবিচলিত ডেটটাইম ব্যবহার করুন বা ২. আপনার সমস্ত ডেটটাইম মানগুলি প্রারম্ভিক পরিবর্তনগুলি সংরক্ষণের আগে সঠিক মানকে আরম্ভ করুন। আপনার পছন্দটি আপনার মডেলটিতে তারিখের সময় মানে কী তা নির্ভর করে।
গিলারমো রাফিনো

1
@ গিলারমো রাফিনো এর সমাধান আমার পক্ষে কাজ করেছে। আপনার সমস্ত ক্ষেত্র পরিদর্শন করুন এবং সেই 0001 বছরের এন্ট্রিগুলি সন্ধান করুন।
ফ্রান্সেস্কো বি।

158

নেট এ ম্যাপ DATETIMEএবং DATETIME2মানচিত্র উভয় System.DateTime- আপনি সত্যই "রূপান্তর" করতে পারবেন না, কারণ এটি সত্যই একই জাতীয় নেট।

এমএসডিএন ডক পৃষ্ঠাটি দেখুন: http://msdn.microsoft.com/en-us/library/bb675168.aspx

SqlDbTypeএই দুটির জন্য " " আলাদা আলাদা দুটি মান রয়েছে - আপনি কি নিজের DataColumnসংজ্ঞা অনুযায়ী এটি নির্দিষ্ট করতে পারবেন ?

বাট: এসকিউএল সার্ভারে, তারিখের সীমাটি সমর্থিত quite

DATETIME1753/1/1 কে "চিরন্তন" (9999/12/31) তে DATETIME2সমর্থন করে , যখন অনন্তকাল ধরে 0001/1/1 সমর্থন করে।

সুতরাং আপনাকে যা করতে হবে তা তারিখের বছরের জন্য যাচাই করা উচিত - যদি এটি 1753 এর আগে DATETIMEহয় তবে এসকিউএল সার্ভারের কলামটি এটি পরিচালনা করার জন্য আপনাকে 1753 এর পরে কিছুতে পরিবর্তন করতে হবে।

আঙ্গুরের ছিরড়া


7
এটি আমার যে সমস্যা ছিল তা ব্যাখ্যা করে। যদিও কয়েকটি পরিস্থিতি রয়েছে যেখানে 1753/1/1 এর আগে আসল তারিখগুলি পরিচালনা করা দরকার তবে এমন অনেকগুলি পরিস্থিতি রয়েছে যেখানে কেউ ডিফল্ট মান অর্জন করে 0001/1/1 যার ফলে ত্রুটি হতে পারে।
হংক

আমি নিশ্চিত হয়েছি যে আমি যখন একটি 'ডেটটাইম' ডেটা টাইপের জন্য 'নতুন ডেটটাইম ()' সন্নিবেশ করানোর চেষ্টা করছিলাম তখন আমি এই ব্যতিক্রমটি পেয়েছি।
জর্জ অনোফ্রেই

1
আমি আমার সি # কোডে ডেটটাইম.মিনভ্যালুর একটি ডিফল্ট মান নির্ধারণ করার চেষ্টা করছিলাম যা একটি ডাটাবেসে লিখেছিল। আমি যে ত্রুটিটি পেয়েছিলাম তা এটি ব্যাখ্যা করে। +1
মেকালাফুট

আমি প্রথমে সত্ত্বা ফ্রেমওয়ার্ক কোড ব্যবহার করি এবং আমি ডেটটাইম সম্পত্তি সহ মডেল ব্যবহার করি। DtInit = new System.DateTime(1492, 10, 12),ব্যর্থ।
কিকিনেট

এটি সেই পরিস্থিতিতে একটি যেখানে প্যাচটির পিছনে আসল কারণটি লুকিয়ে রয়েছে ... +1
ইউজিনিও মিরি

41

আমার এসকিউএল সার্ভার ২০০৮ ডাটাবেসে আমার একটি DateTimeকলামটি অযোগ্য নয়, তবে GetDate()এটির ডিফল্ট মান হিসাবে একটি ফাংশন রয়েছে ged EF4 ব্যবহার করে নতুন বস্তুটি সন্নিবেশ করানোর সময়, আমি এই ত্রুটিটি পেয়েছি কারণ আমি আমার বস্তুর উপর ডেটটাইম সম্পত্তিটি স্পষ্টভাবে পাস করছিলাম না। আমি এসকিউএল ফাংশনটি আমার জন্য তারিখটি পরিচালনা করবে বলে আশাবাদী তবে তা হয়নি। আমার সমাধানটি হ'ল কোডটি তৈরি করার জন্য ডাটাবেসের উপর নির্ভর করার পরিবর্তে কোড থেকে তারিখের মান পাঠানো।

obj.DateProperty = DateTime.now; // C#

2
সাহায্য করে আনন্দ পেলাম. এটি বিরক্তিকর কারণ আপনি যদি মনে করেন যে EF ডেটা প্রসঙ্গটি সারণী থেকে বস্তুটি তৈরি করা হয় তখন ক্ষেত্রটির একটি ডিফল্ট মান থাকে।
গ্রাহাম

আমি EF সম্পর্কে প্রচুর জিনিস চিন্তা করব। আমি পোকো স্ব-ট্র্যাকিং সত্তাগুলি ব্যবহার করছি এবং এটি এমন একটি ক্লাস্টার। আমি কোডটি প্রথম মডেলটি যাচাই করতে যাচ্ছি, এবং যদি তাও বোকামি পূর্ণ হয় তবে আমি লিনাক থেকে ফিরে এসকিএল ফিরে যাব এবং আমার নিজের সত্তায়

2
আমি 2 সপ্তাহ আগে ভিএস লাইভ এ ইএফ কোড ফার্স্টের একটি ডেমো দেখেছি এবং এটি দেখতে দুর্দান্ত, বিটিডব্লিউ।
গ্রাহাম

এটা ভাল সংবাদ. আমরা শীঘ্রই আমার অফিসে একটি নতুন প্রকল্প শুরু করব, এবং আমি ইএফ-সিএফ এবং ড্যাপারে বিভক্ত হয়েছি (এসও দ্বারা ব্যবহৃত / রক্ষণাবেক্ষণ)। এটি সম্ভবত নেমে আসবে যা ডাব্লুসিএফ পরিষেবার মাধ্যমে ব্যবহৃত একটি অ্যাপ্লিকেশনটিতে আরও ভাল।

1
হ্যালো, বছরের পুরানো মন্তব্য! আমি নিজেই ইএফ কোড-ফার্স্ট দিয়ে শুরু করছি এবং আমার পোকোতে আমার ডেটটাইম সদস্য হিসাবে কেবল তার সংজ্ঞা দেওয়ার দরকার ছিল Nullable<DateTime>এবং কোডে আমি এই সত্যই বাতিল করতে পারি (01/01/0000 এর পরিবর্তে)। আমি আনন্দদায়কভাবে দেখে অবাক হয়ে গিয়েছিলাম যে এসকিউএল-এর কাছে EF, INSERT এ এই নালটিকে উপেক্ষা করতে এবং সার্ভারের তারিখটি ব্যবহার করতে জানত ( GetDate()) ... আমাদের জন্য এটি আরও ভাল ছিল যেহেতু আমাদের মধ্যে ঘড়ির পার্থক্যের বিষয়ে চিন্তা না করেই সার্ভারে আরও ভাল ধারাবাহিকতা প্রয়োজন since ওয়েব সার্ভার এবং এটি এসকিএল সার্ভারের।
ফানকা

34

আমার জন্য এটি ছিল কারণ তারিখের সময় ছিল ..

01/01/0001 00:00:00

এই ক্ষেত্রে আপনি EF ডেটটাইম অবজেক্টটি আপনার কাছে নাল বরাদ্দ করতে চান ... উদাহরণ হিসাবে আমার ফার্স্টইয়ার রেজিস্টার্ড কোডটি ব্যবহার করে

DateTime FirstYearRegistered = Convert.ToDateTime(Collection["FirstYearRegistered"]);
if (FirstYearRegistered != DateTime.MinValue)
{
    vehicleData.DateFirstReg = FirstYearRegistered;
}  

আমি এক্সেলডিটাআরডার ব্যবহার করে এই ডেটাটি পার্স করছি এবং এটি 01/01/0001 ফেরত দিচ্ছে যখন অবৈধ পাঠ্য প্রবেশ করানো হয়েছিল (.GetDateTime (কলামইন্ডেক্স) পদ্ধতিটি ব্যবহার করে প্রত্যাশার মতো ব্যতিক্রম ছুঁড়ে না)। MinValue এর সাথে তুলনা স্কয়ারে ব্যতিক্রমের বাইরে থাকা রোধ করার কৌশলটি করেছিল।
টমি

22

এই আমাকে পাগল করছে। আমি একটি নালাম তারিখের সময় ( DateTime?) ব্যবহার এড়াতে চেয়েছিলাম । এসকিউএল সার্ভার ২০০৮ এর datetime2টাইপটি ব্যবহার করার বিকল্প আমার কাছে নেই

modelBuilder.Entity<MyEntity>().Property(e => e.MyDateColumn).HasColumnType("datetime2");

আমি অবশেষে নিম্নলিখিতগুলির জন্য বেছে নিয়েছি:

public class MyDb : DbContext
{
    public override int SaveChanges()
    {
        UpdateDates();
        return base.SaveChanges();
    }

    private void UpdateDates()
    {
        foreach (var change in ChangeTracker.Entries<MyEntityBaseClass>())
        {
            var values = change.CurrentValues;
            foreach (var name in values.PropertyNames)
            {
                var value = values[name];
                if (value is DateTime)
                {
                    var date = (DateTime)value;
                    if (date < SqlDateTime.MinValue.Value)
                    {
                        values[name] = SqlDateTime.MinValue.Value;
                    }
                    else if (date > SqlDateTime.MaxValue.Value)
                    {
                        values[name] = SqlDateTime.MaxValue.Value;
                    }
                }
            }
        }
    }
}

1
ব্যবহার করছেন [Column(TypeName = "datetime2")]?
কিকিনেট

21

কখনও কখনও EF জানে না যে কোনও গণিত কলাম বা ট্রিগার নিয়ে কাজ করছে । ডিজাইন অনুসারে, এই ক্রিয়াকলাপগুলি inোকানোর পরে EF এর বাইরে একটি মান সেট করবে।

সম্পত্তিটিতে এই কলামটির জন্য Computedসমাধানটি EF এর মধ্যে নির্দিষ্ট করতে হবে ।edmxStoreGeneratedPattern

আমার জন্য এটি তখন ছিল যখন কলামটিতে একটি ট্রিগার ছিল যা বর্তমান তারিখ এবং সময় সন্নিবেশ করিয়েছিল, তৃতীয় বিভাগে নীচে দেখুন।


সমাধানের পদক্ষেপ

ভিজ্যুয়াল স্টুডিওতে Model Browserপৃষ্ঠাটি খুলুন Modelতারপরে Entity Types-> তারপরে

  1. সত্তা এবং তারিখ সময় সম্পত্তি নির্বাচন করুন
  2. নির্বাচন করা StoreGeneratedPattern
  3. সেট Computed

EF মডেল ব্রাউজার মডেল সত্তা টাইপ কথোপকথন


এই অবস্থার জন্য অন্যান্য উত্তরগুলি হ'ল কার্যক্ষেত্রের কলামের উদ্দেশ্যে, রেকর্ডটি তৈরি হওয়ার সময় নির্দিষ্ট সময় / তারিখ নির্দিষ্ট করা এবং সঠিক সময় যুক্ত করার জন্য ট্রিগার চালানো এসকিউএল এর কাজ। যেমন এই এসকিউএল ট্রিগার:

DEFAULT (GETDATE()) FOR [DateCreated]


নোট করুন যে আমি ব্যবহার করেছি GETDATE()যা আমি আক্ষরিক সময়ে করেছি। তবে একটি সাম্প্রতিক মন্তব্য ছিল যে SYSDATETIME()কোনও তারিখটাইম 2 অপারেশনের জন্য ব্যবহার করা উচিত যা আমি সত্য বলে বিশ্বাস করি।
gaমেগামান

10

আমি এটিতে ছুটে এসেছি এবং আমার তারিখের সময়ের সম্পত্তিটিতে নিম্নলিখিতগুলি যুক্ত করেছি:

 [Column(TypeName = "datetime2")]
 public DateTime? NullableDateTimePropUtc { get; set; }

1
using System.ComponentModel.DataAnnotations.Schema; প্রয়োজনীয়
কিকিনেট

9

আমরা যদি তারিখের সময় ক্ষেত্রের তারিখের সময়টি পাস না করি তবে ডিফল্ট তারিখ {1/1/0001 12:00:00 এএম be উত্তীর্ণ হবে।

তবে এই তারিখটি সত্তা ফ্রেমের কাজের সাথে সামঞ্জস্যপূর্ণ নয় সুতরাং এটি একটি ডেটটাইম 2 ডেটা টাইপের রূপান্তরকে ডেটটাইম ডেটা টাইপে ফেলে দেবে যার ফলস্বরূপ সীমার মান ছাড়িয়ে যায়

default DateTime.nowআপনি যদি কোনও তারিখ পাস না করে থাকেন তবে কেবল তারিখের ক্ষেত্রে।

movie.DateAdded = System.DateTime.Now

আমি বলব 'ডেটটাইম.নাউ' ডিফল্ট মান হিসাবে পাস করা সঠিক হওয়া থেকে দূরে, এবং বরং বিভ্রান্তিকর।
বার্তোসজ

6

সবচেয়ে সহজ জিনিসটি হ'ল ডেটটাইমের পরিবর্তে ডেটটাইম 2 ব্যবহার করতে আপনার ডাটাবেসটি পরিবর্তন করা। সামঞ্জস্যতা দুর্দান্তভাবে কাজ করে, এবং আপনি আপনার ত্রুটিগুলি পাবেন না।

আপনি এখনও একগুচ্ছ পরীক্ষা করতে চাইবেন ...

ত্রুটিটি সম্ভবত কারণ আপনি বছর 0 বা অন্য কোনও তারিখ নির্ধারণ করার চেষ্টা করছেন - তবে এটি আপনার উপর স্টাফ পরিবর্তন করার নিয়ন্ত্রণ কোথায় রয়েছে তার উপর নির্ভর করে।


4

আমি এই পোস্টটি নীচের ত্রুটিটি কেন রেখেছি যা অন্য উত্তরের মাধ্যমে ব্যাখ্যা করা হয়েছে তা বোঝার চেষ্টা করে দেখতে পেলাম।

একটি ডেটটাইম 2 ডেটা টাইপের রূপান্তরিত হওয়ার ফলে ডেটটাইম ডেটা টাইপের পরিবর্তে সীমার মান হয়।

একটি nlalable ডেটটাইম অবজেক্ট ব্যবহার করুন।
পাবলিক ডেটটাইম? ক্রয় তারিখ {পান; সেট; }

আপনি সত্তা ফ্রেমওয়ার্ক ব্যবহার করে থাকেন করার edmx ফাইলে nullable সম্পত্তি সেট ট্রু

এডিএমএক্স ফাইলের অযোগ্য সম্পত্তিটি ** সত্য ** এ সেট করুন


3

হিসাবে andyuk ইতিমধ্যে সরু-আউট আছে, এই ঘটতে পারে যখন একটি শূন্য মান একটি অ nullable নির্ধারিত হয় তারিখসময় ক্ষেত্র। ডেটটাইমকে ডেটটাইমে পরিবর্তন করার কথা বিবেচনা করবেন ? বা নুলযোগ্য < ডেটটাইম >। মনে রাখবেন যে, আপনি যদি কোনও নির্ভরতা সম্পত্তি ব্যবহার করছেন তবে আপনার নির্ভরতা সম্পত্তির ধরণটিও একটি অযোগ্য ডেটটাইম টাইপ কিনা তা নিশ্চিত হওয়া উচিত।

নীচে ডেটটাইম থেকে অসম্পূর্ণ ডেটটাইমের বাস্তব জীবনের উদাহরণ দেওয়া আছে ? টাইপ সামঞ্জস্য যা বিজোড় আচরণ উত্থাপন করে

এখানে চিত্র বর্ণনা লিখুন


2

সত্তা ফ্রেমওয়ার্ক 4 ডেটটাইম 2 ডেটা টাইপের সাথে কাজ করে যাতে ডিবিতে সংশ্লিষ্ট ক্ষেত্রটি এসকিউএল সার্ভার ২০০৮ এর জন্য ডেটটাইম 2 হতে হবে।

সমাধানটি অর্জনের জন্য দুটি উপায় রয়েছে।

  1. সত্ত্বা ফ্রেমওয়ার্ক 4-তে ডেটটাইম ডেটা টাইপ ব্যবহার করতে আপনাকে এডিএমএক্স-ফাইলে প্রোভাইডার ম্যানিফেস্ট টোকেনকে "2005" এ পরিবর্তন করতে হবে।
  2. যদি আপনি সংশ্লিষ্ট ক্ষেত্রটিকে নালকে মঞ্জুরি হিসাবে সেট করেন (এটি এটিকে নূলেলে রূপান্তর করে) তাই EF স্বয়ংক্রিয়ভাবে তারিখের সময়গুলিকে তারিখের সময় হিসাবে ব্যবহার করে।

1
আমি আমার ডাটাবেস মডেলগুলির (পোকো ক্লাস) জন্য আপনার দ্বিতীয় পয়েন্টটি তুলেছি এবং ভাবলাম কীভাবে একটি ক্ষেত্রকে নালার মতো সেট করা যায়। কেউ যদি অবাক হয়, আপনি তারিখের ধরণের পরে একটি প্রশ্ন চিহ্ন (?) যুক্ত করে এটি করতে পারেন। যেমন পাবলিক ডেটটাইম? স্টার্টটাইম {get; সেট; } এটি আমার জন্য সমস্যাটি সমাধান করেছে। কেবলমাত্র আমাকে যা করতে হবে তা ছিল কোডের লাইনের চারপাশে টাইমস্প্যান castালাই রাখা যেখানে আমি একে অপরের থেকে দুটি অপ্রয়োজনীয় ডেটটাইম মানগুলি বিয়োগ করছি। যেমন var টাইমকেন = (টাইমস্প্যান) (এন্ডটাইম - স্টার্টটাইম);
সিয়ারান গ্যালাগার

1

@ আকাশ-দেব বাস্তবায়নের ভিত্তিতে একটি বেস ক্লাস তৈরি করেছে। সুতরাং এটি একাধিক প্রসঙ্গ এবং সত্তায় সহজেই প্রয়োগ করা যেতে পারে।

public abstract class BaseDbContext<TEntity> : DbContext where TEntity : class
{
    public BaseDbContext(string connectionString)
        : base(connectionString)
    {
    }
    public override int SaveChanges()
    {

        UpdateDates();
        return base.SaveChanges();
    }

    private void UpdateDates()
    {
        foreach (var change in ChangeTracker.Entries<TEntity>())
        {
            var values = change.CurrentValues;
            foreach (var name in values.PropertyNames)
            {
                var value = values[name];
                if (value is DateTime)
                {
                    var date = (DateTime)value;
                    if (date < SqlDateTime.MinValue.Value)
                    {
                        values[name] = SqlDateTime.MinValue.Value;
                    }
                    else if (date > SqlDateTime.MaxValue.Value)
                    {
                        values[name] = SqlDateTime.MaxValue.Value;
                    }
                }
            }
        }
    }
}

ব্যবহার:

public class MyContext: BaseDbContext<MyEntities>
{

    /// <summary>
    /// Initializes a new instance of the <see cref="MyContext"/> class.
    /// </summary>
    public MyContext()
        : base("name=MyConnectionString")
    {
    }
    /// <summary>
    /// Initializes a new instance of the <see cref="MyContext"/> class.
    /// </summary>
    /// <param name="connectionString">The connection string.</param>
    public MyContext(string connectionString)
        : base(connectionString)
    {
    }

     //DBcontext class body here (methods, overrides, etc.)
 }

1

আপনার মডেল বর্গের সম্পত্তিটিতে নীচে উল্লিখিত গুণাবলী যুক্ত করুন।

Attribute = [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
Reference = System.ComponentModel.DataAnnotations.Schema

প্রাথমিকভাবে আমি এই গুণটি যুক্ত করতে ভুলে গিয়েছিলাম। সুতরাং আমার ডাটাবেসে সীমাবদ্ধতা তৈরি করা হয়েছিল

ALTER TABLE [dbo].[TableName] ADD DEFAULT (getdate()) FOR [ColumnName]

এবং আমি এই বৈশিষ্ট্যটি যুক্ত করে আমার ডিবি আপডেট করেছিলাম তবে তা পরিবর্তিত হয়ে যায়

ALTER TABLE [dbo].[TableName] ADD CONSTRAINT [DF_dbo.TableName_ColumnName] DEFAULT (getdate()) FOR [ColumnName]

[ডাটাবেস জেনারেটেড (ডাটাবেস
জেনারেটেড অপশন.কম্পিউটেড

0

আমার ক্ষেত্রে আমরা একটি তারিখ একটি তারিখের সময় কাস্ট করছি এবং আমরা এই ত্রুটি পেয়েছি। যা ঘটে তা হ'ল তারিখটিতে "আরও প্রোগ্রামার ভিত্তিক" ন্যূনতম 01/01/0001 রয়েছে, যখন ডেটটাইম 1753 এ আটকে থাকে

আমাদের অংশে একটি ডেটা সংগ্রহ ত্রুটির সাথে এটি একত্রিত করুন এবং আপনি আপনার ব্যতিক্রম পেয়েছেন!


1492 সালে আমেরিকা আবিষ্কার, ভুল যদি ব্যবহার করবেন datetime2
Kiquenet

0

কখনও কখনও এটি সার্ভারগুলিতে নয়, ডেভলপমেন্ট মেশিনে সূক্ষ্মভাবে কাজ করে। আমার ক্ষেত্রে আমাকে লিখতে হয়েছিল:

<globalization uiCulture="es" culture="es-CO" />

ওয়েবকনফিগ ফাইলে।

মেশিনে (সার্ভার) সময় অঞ্চলটি ঠিক ছিল (সিও লোকালে) তবে ওয়েব অ্যাপটি তা করেনি। এই সেটিংটি হয়ে গেছে এবং এটি আবার ভাল কাজ করেছে।

অবশ্যই, সমস্ত তারিখের মান ছিল।

: ডি


0

এএসপি.নেট ক্লাসে এই কোড যুক্ত করা আমার পক্ষে দুর্গন্ধযুক্ত:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Properties<DateTime>().Configure(c => c.HasColumnType("datetime2"));
}

0

আমি এই সমস্যা সম্পর্কে সচেতন এবং আপনার সকলেরও হওয়া উচিত:

https://en.wikipedia.org/wiki/Year_2038_problem

এসকিউএল-এ এই সমস্যাটি এড়াতে একটি নতুন ফিল্ড টাইপ তৈরি করা হয়েছিল (ডেটটাইম 2)।

এই 'তারিখ' ক্ষেত্রের টাইপের একটি ডেটটাইম। নেট ক্লাসের মতোই রেঞ্জের মান রয়েছে। এটি আপনার সমস্ত সমস্যার সমাধান করবে, সুতরাং আমি মনে করি এটি সমাধানের সর্বোত্তম উপায়টি হ'ল আপনার ডাটাবেস কলামের ধরণটি পরিবর্তন করা (এটি আপনার টেবিলের ডেটাগুলিকে প্রভাবিত করবে না)।


0

নিম্নলিখিত দুটি পরীক্ষা করে দেখুন: 1) এই ক্ষেত্রটির কোনও নুল মান নেই। উদাহরণ স্বরূপ:

 public DateTime MyDate { get; set; }

প্রতিস্থাপন করুন:

public DateTime MyDate { get; set; }=DateTime.Now;

2) আবার নতুন ডাটাবেস। উদাহরণ স্বরূপ:

db=new MyDb();

আপনি যদি মানটি ডেটটাইম হিসাবে না চান? এখন ডিফল্টরূপে?
সেভেজ

আপনি যদি না চান: ডেটটাইম.নাউ। আপনি ব্যবহার করতে পারেন: নতুন ডেটটাইম (..., ..., ...)
রেইনিটাইয়ার্স 19:39

0

উত্তরাধিকারসূত্রে ডেটটাইম বৈশিষ্ট্য নিয়ে সমস্যা

এই ত্রুটি বার্তাটি প্রায়শই প্রদর্শিত হয় যখন কোনও নন-অযোগ্য তারিখের ক্ষেত্রটি সন্নিবেশ / আপডেটের সময় মান বাতিল করে। একটি কারণ উত্তরাধিকার হতে পারে।

যদি আপনার তারিখটি বেস-শ্রেণীর উত্তরাধিকার সূত্রে হয় এবং আপনি ম্যাপিং ইএফ তৈরি না করেন তবে এটির মান পড়বে না।

আরও তথ্যের জন্য: https://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-3-table-per-concrete-type-tpc-and- নির্বাচন-কৌশল-নির্দেশিকা


0

আমি এই পৃষ্ঠাটি এএসপি. নেট এমভিসি ইউএনগ সম্পাদনা করতে চাইলে এই ত্রুটিটি দেখেছি। ডেটাবেস তৈরি করার সময় আপডেট করার সময় আমার কোনও সমস্যা হয়নি তবে আমার তারিখের তৈরি সম্পত্তিটি সীমার বাইরে চলে গেছে!

যখন আপনি নিজের DateTimeসম্পত্তিটি নালামযোগ্য হতে চান না এবং এটির বর্গমিশাল ডেটটাইম সীমাতে (এবং সহায়তা @Html.HiddenForকরে না!) তা পরীক্ষা করতে চান না, তখন কেবল static DateTimeসম্পর্কিত শ্রেণীর (কন্ট্রোলার) অভ্যন্তরে কোনও ক্ষেত্র যুক্ত করুন এবং যখন এটির মান দিন জিইটি অপারেটিং করছে তারপরে যখন পোস্ট এটি কাজ করে তখন এটি ব্যবহার করুন:

public class PagesController : Controller
{
    static DateTime dateTimeField;
    UnitOfWork db = new UnitOfWork();

    // GET:
    public ActionResult Edit(int? id)
    {
        Page page = db.pageRepository.GetById(id);
        dateTimeField = page.DateCreated;
        return View(page);
    }

    // POST: 
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(Page page)
    {
        page.DateCreated = dateTimeField;
        db.pageRepository.Update(page);
        db.Save();
        return RedirectToAction("Index");

    }
}

0

আমি একটি সাধারণ কনসোল অ্যাপ্লিকেশন প্রকল্পটিতে এই ইস্যুটিতে ছড়িয়ে পড়েছি এবং আমার দ্রুত সমাধানটি হ'ল যে কোনও সম্ভাব্য ডেটটাইম 2 তারিখকে এই পদ্ধতিটি চালিয়ে একটি অযোগ্য ডেটটাইমে রূপান্তর করা:

static DateTime? ParseDateTime2(DateTime? date)
    {
        if (date == null || date.ToString() == "1/1/0001 12:00:00 AM")
        {
            return null;
        }
        else
        {
            return date;
        }
    }

এটি অবশ্যই একটি সম্পূর্ণ বিস্তৃত পদ্ধতি নয়, তবে এটি আমার প্রয়োজনের জন্য কাজ করেছে এবং সম্ভবত এটি অন্যকে সহায়তা করবে!


0

ডিবিতে রেকর্ড ফর্ম্যাটটি পরীক্ষা করুন। যেমন আমার ডিবির ডিফল্ট মান বা বাঁধাই আছে(((1)/(1))/(1900))

System.DateTime MyDate = new System.DateTime( 1900 ,1, 1);

এখানে চিত্র বর্ণনা লিখুন


-1

আপনার তারিখের কলাম থাকবে যা 1/1/1001 এর মতো অনুমোদিত ডেটটাইমের ন্যূনতম মানটি লেসথনে সেট করা হয়েছিল।

এই সমস্যাটি কাটিয়ে ওঠার জন্য আপনি যথাযথ তারিখের মানটি আপনার সম্পত্তি অ্যাডনে সেট করতে পারেন এছাড়াও ইস্পেসিফাইড = সত্যের মতো আরও একটি যাদুকরী সম্পত্তি সেট করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.