[c#、DAPPER、MS Access]を使用してデータを挿入するだけですが、c#の[DateTime]列は[date/time]列MsAccessで "条件式のデータの不一致"のような問題が発生します。Oledb、C#、Dapperを使用した条件式のデータの不一致
長い研究の末、linkが得られましたが、ここでは「フロア」ソリューションは機能しません。どんな提案も大歓迎です。
[c#、DAPPER、MS Access]を使用してデータを挿入するだけですが、c#の[DateTime]列は[date/time]列MsAccessで "条件式のデータの不一致"のような問題が発生します。Oledb、C#、Dapperを使用した条件式のデータの不一致
長い研究の末、linkが得られましたが、ここでは「フロア」ソリューションは機能しません。どんな提案も大歓迎です。
は、私の作品のようなものを試してみてください:ここ
@CLStart = DateTime.Parse(Convert.ToDateTime(client.CLStart).ToShortDateString())
client.CLStart
は、データ型DateTime?
である - 私はDapperのと組み合わせてSQLクエリを手書きするとき前にこの問題を持っていたNullable<DateTime>
とMS Accessクエリに複数のパラメータがある場合。 問題は、アクセスエンジンがパラメータの順序を考慮せず、アルファベット順にソートすることです。例えば
テイクMyTableというという名前のこのサンプル表:
public class MyClass
{
public int MyNumber { get; set; }
public DateTime MyDate { get; set; }
}
そしてMyClassのがあなたに渡されたインスタンスを持っていた:
MyNumber Number
MyDate Date/Time
あなたがC#のMyClassクラスを持っていたと仮定すると、 Dapperの声明の後:
connection.Execute("INSERT INTO MyTable (MyNumber, MyDate) VALUES (@MyNumber, @MyDate)", myClass);
System.Data.OleDb.OleDbExceptionによって: '条件式のデータ型が一致しません。'というステートメントが失敗します。
これは、Accessによってパラメータがアルファベット順にソートされるためです。この場合、日付と日付に数字をスティックして番号にスティックします。
アルファベット順にパラメータを命名するか、アルファベット順に並べ替えることで回避できます。この場合、上記の記述は次のように書き直すことができます:
connection.Execute("INSERT INTO MyTable (MyDate, MyNumber) VALUES (@MyDate, @MyNumber)", myClass);
いくつかのトレイルの後、私はそれがアクセスエンジンではないことを発見しました。これはDbCommandを生成するためにあなたの 'MyClass'をアルファベットにマッピングするDapperのようなものです。 'new {MyNumber = 1、MyDate = Today}'のような匿名のオブジェクトを使って、デフォルトのアルファベット順を上書きする最初のステートメントを照合することができます。エラーは発生しません。 Dapperのマッピングリフレクションは、エンティティのプロパティの順序に関係しているようです。そして、 'OleDbCommand'を使って手をコード化してみてください。順序は 'cmd.Parameters.Add'に依存します。 – joe
ありがとう、私はこれを試してみましょう。 –