問題タブ [datetime2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - DataColumn - datetime または datetime2 を区別する方法
日時 DataColumn のタイプを特定するのに問題があります。
SQL 2008 から DataTable を取得すると、datetime DataColumn は datetime または datetime2 になる可能性がありますが、C# では違いがないようです。
SQL にロードする前にデータを検証する必要があります...
何か案は?
vb.net - DateTime2 を使用した SQL Server 2008 ストアド プロシージャ
DateTime2
SQL Server 2008のストアド プロシージャとデータ型についてちょっとした質問があります。
データ型を使用していくつかのストアド プロシージャを取得しDateTime2
、日付を挿入したいのです0001.01.01 00:00:00
が、これは VB.net では機能せず、理由がわかりません。
私はこのコードフラグメントを使用します:
プログラムからストアド プロシージャを呼び出す (ストアド プロシージャは単純なINSERT
ステートメントであり、実際の日付で正常に動作します)。しかし、日付を入力する0001.01.01 00:00:00
と、ストアド プロシージャを実行するときに「01.01.1753」より前に日付を挿入できないというエラーが常に表示されます。
DateTime2
これで、SQL Serverのデータ型がこれをサポートする必要があることがわかりました。
したがって、私の質問は、これがドライバーの問題であり、SQLClient を更新することでこれが解決される可能性があるか、またはこれが一般的な問題であり、最終的に検索を停止して 1753.01.01 を使用できるかということです。
ありがとうリム
.net - EF:ProviderManifestTokenを変更しますか、それともデータ型を変更しますか?
2つの質問とそれに続く詳細:
- ProviderManifestTokenを「2005」に変更すると、他にどのような副作用が発生しますか?
datetime
データベースのスキーマをからに変更するのは賢明ではありませんdatetime2
か?たとえば、ProviderManifestTokenを「2008」のままにして、後で誰かがEDMXモデルからデータベーススキーマを生成しようとしたdatetime2
場合、列を作成するときにこれらの列にデータ型を使用しますか?
詳細:
VS2010 SP1
.NET 4
EF 4
SQL Server 2008
私はEntityFrameworkの実践的な経験がなく、それを使用するコードベースを突然維持しています。コードベースは脆弱で、スケジュールが厳しく、残っている人にはまだよく理解されていません。
ソリューションエクスプローラーには、DEVデータベース内の既存のスキーマにマップするEDMXファイルが表示されます。どちら(モデルまたはデータベース)が最初に来たのかわかりません。
コミット操作は次のエラーで失敗します:
datetime2データ型をdatetimeデータ型に変換すると、値が範囲外になりました。
SQL Server 2008インスタンスの日付/時刻列のデータ型を見ると、それらはすべてdatetime
であり、ではありませんdatetime2
。
EDMXファイルのXMLを見ると、次のスキーマ要素属性が表示されます。
ProviderManifestToken = "2008"
どこかで、SQLServer2008のdatetime
データ型の範囲外の値を持つDateTime値が.NETコードにあると思います。私は、EDMXのProviderManifestTokenを「2005」に変更すると、EFがdatetime2
これらのコミット中にタイプを使用しようとするのを防ぐことができることを読んで収集しました。
私の問題は次のとおりです。2008年から2005年に変更すると、このコードベースまたはEFの位置が他に何が変わるかわかりません。また、絶対に必要でない場合は、テクノロジーを後戻りすることに偏見があります。
sql-server-2008 - DateTime2 の後の数値はナノ秒の目的ですか?
ドキュメントは既に読みましたが、完全には理解できません デフォルトの精度は datetime2(7) です 7 はナノ秒の精度を表しますか?
sql-server-2008 - DateTime2 を使用しない理由はありますか?
新しい DateTime2 データ型を使用しない理由がありませんか?
たとえば、別のデータベース システムに移行したり、別のテクノロジと統合したりするときに問題が発生する可能性はありますか?
datetime2 - select/updateステートメントのdatetime(2)?
日付基準に基づいて 1 つのテーブルからレコードを選択し、関連するテーブルに別の日付フィールドを設定することで、一部のレガシー データをクリーンアップしようとしています。2 つの日付が同じではない場合があります。それはユーザー (Field Crew Boss) 次第です。このクリーンアップの対象となる何千ものレコードがあります。(何らかの理由で) すべての日付フィールドに datetime(2) を使用しており、yyyymmdd の後の「パディング」にはミリ秒を含む時間が含まれているため、次のコードにつまずいています。クエリでキャプチャします。
java - SQL Serverのtimestamp2はJDBCでどのように機能するはずですか?
SQL Server 2008でTimestampの代わりにtimestamp2を使用しようとすると、問題が発生します。どうやら、rs.getTimestampの動作はtimestampとtimestamp2で大きく異なります。ただし、違いがあるはずだ、または別のものを使用する必要があるというドキュメントが見つかりません。何か間違ったことをしているだけなのかしら。
環境:
- SQL Express 2008(10.0)とSQL Server 2008 R2(10.5)の両方で試してみました。
- sqljdbc4.jarバージョン3.0、サイズ537,303バイト、CRC-32 = a0aa1e25、MD5=402130141d5f2cee727f4371e2e8fd8a。
- Java 1.6
これが問題を示す単体テストです。唯一の「魔法」は「Db.getConnection()」であり、これを適切なコードに置き換えることができます。テストはdatetimeとdatetime2の両方で同じですが、datetime2テストは2日前の日付で失敗します。DBでは常にGMT/UTCとして扱い、datetime2データのデータベースデータにタイムゾーン情報を追加しようとはしていません。
タイムスタンプに戻す唯一のオプションはありますか?
編集:将来のGoogle社員のために、sqljdbc4.jarバージョン3.0を使用すると、テストはLinuxでは失敗しますが、Windowsでは合格します。SQLServer2012に付属しているsqljdbc4.jarバージョン4.0はまだ試していません。
.net - .NET DateTime 型の場合、推論されたデータベース型が SqlDbTypes.DateTime2 ではなく SqlDbTypes.DateTime になるのはなぜですか?
.NET DateTime 型の場合、推論されたデータベース型が SqlDbTypes.DateTime2 ではなく SqlDbTypes.DateTime になるのはなぜですか? ( http://msdn.microsoft.com/en-us/library/yy6y35y8.aspxを参照)
バックグラウンド
精度の低い SQL DateTime 型にデフォルト設定することにより、.NET フレームワークは、デフォルトで、指定されていない SqlDbType を持つ SqlParameter オブジェクトを介して渡される .NET DateTime 値が、精度の低下によって確実に破損することを保証します。単純に完全な値を保持することで悪い結果が生じることはないことを考えると、これは悪い設計上の決定です。
たとえば、SqlParameterCollection.AddWithValue メソッドは使用できません。これは、DateTime 値を渡すときに、値が非常に限られた範囲の SQL DateTime 値に切り捨てられるためです。結果は次のいずれかです。
- .NET DateTime 値が SQL DateTime 値の許容範囲外であり、エラーが発生する、または
- 切り捨てられた値は、データベース内のより正確な値と一致せず、更新操作のレコードと適切に一致しません。これはさらに悪いことに、IMO です。微妙でエラーを生成しないためです。
質問
.NET DateTime は、精度と範囲の両方で SQL Server 2008 データ型 "datetime2(7)" に最も密接に対応するため、フレームワークが SqlParameter 値を SQL DateTime に変換するのはなぜですか。デフォルトの動作を変更する方法はありますか型推論機能を引き続き使用できますか?
私が見ることができる唯一のアドバイスは、機能が壊れており、データ型を常に明示的に指定する必要があるということです。これには、多くのコード変更が必要になります。フレームワークが .NET DateTime 値の元の値を単純に保持していれば、問題は少なくなると思います。データベース フィールドの型が精度の低い SQL DateTime 型である場合、クエリに渡される日付/時刻文字列値は、データベース エンジンによって単純に切り捨てられます。範囲外の場合は、予想どおりエラーが発生します。さらに重要なことは、データベース フィールド タイプが datetime2 の場合、すべてがスムーズに流れ、レコードが適切に一致することです。
sql-server-2005 - SQLServer2005はdatetime2をサポートしていますか
SQL Server 2005がdatetime2データ型をサポートしている場合、公式ドキュメントで見つけることができないようです。
.net - EF 4.1、CodeFirst C#DateTimedatetime2とdatetimeの非互換性を回避する方法
私のCodeFirstモデルにはSystem.DateTime
プロパティがあります。データベースシードコードが呼び出されると、次の例外がスローされます。
SqlException(0x80131904):datetime2データ型をdatetimeデータ型に変換すると、値が範囲外になりました。
コンストラクターを使用して新しいDateTime
オブジェクトを作成しています。コードファーストはデータベーススキーマの作成です。コードファーストでこの明らかなバグを克服するにはどうすればよいですか?私は自分のデータ型にこだわっていません。日付と、オプションで時刻を保存するだけで済みますが、重要ではありません。
私はたくさんの投稿を検索して読みましたが、このエラーが発生したものは、CodeFirstで生成されたデータスキームからのものであることを示していません。私が見つけた最も近い答えProviderManifestToken
は、edmx
ファイル内のを変更することでしたが、私のプロジェクトにはファイルがありませんedmx
。私はデザイナーを使用しませんでした。コードファーストを使用しています。