2

これは NPOCO を使用する最初の試みであり、MS SQLEXPRESS データベースを読み込もうとしています

NuGet の NPOCO "2.2.49"、SQLEXPRESS 2008 R2、VS 2013、.NET 4.5

接続文字列は

<connectionStrings>
    <add name="TrackTime.Properties.Settings.connectionDB" connectionString="Data Source=ame-PC\SQLEXPRESS;Initial Catalog=TrackTime;Integrated Security=True"
  providerName="System.Data.SqlClient" />
</connectionStrings>

コードは

db = new Database("TrackTime.Properties.Settings.connectionDB");
var tracks = db.Fetch<trackdatum>();
// List<trackdatum> tracks = db.Fetch<trackdatum>();

trackdatum class
        using NPoco;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace TrackTime
    {
        [TableName("trackdata")]
        [PrimaryKey("trackdata_id")]
        [ExplicitColumns]
        public partial class trackdatum
        {
            [Column]
            public string trackdata_customer { get; set; }

            [Column]
            public DateTime trackdata_date { get; set; }

            [Column]
            public DateTime trackdata_end { get; set; }

            [Column]
            public int trackdata_id { get; set; }

            [Column]
            public string trackdata_note { get; set; }

            [Column]
            public string trackdata_project { get; set; }

            [Column]
            public DateTime trackdata_start { get; set; }

            [Column]
            public string trackdata_task { get; set; }

            [Column]
            public TimeSpan trackdata_worked { get; set; }
        }
    }

この行で

var tracks = db.Fetch<trackdatum>();

(コメント行も同じ結果で試しました。)

この例外が発生します

System.InvalidCastException was unhandled
HResult=-2147467262
Message=Object must implement IConvertible.
Source=mscorlib
StackTrace:
   at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
   at NPoco.PocoData.<>c__DisplayClass19.<GetConverter>b__14(Object src)
   at poco_factory_0(IDataReader , trackdatum )
   at NPoco.Database.<Query>d__7`1.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at NPoco.Database.Fetch[T](Sql sql)
   at NPoco.Database.Fetch[T](String sql, Object[] args)
   at NPoco.Database.Fetch[T]()

をちょきちょきと切る ...

なんで?どうすれば修正できますか?

// アンダース

4

2 に答える 2

3

必要なスタック トレースに応じて、POCOプロパティを実装するIConvertible必要がありますTimeSpan

于 2014-03-21T20:09:56.300 に答える
3

おそらくすでに解決していますが、問題は、データベースからデータ型を持つ列をフェッチし、それをC# クラスのTIMEデータ型を持つプロパティにマップしようとしている可能性があります。DATETIMEもしそうなら、データ型をTIMESPANC# コードに変更すると、うまくいくはずです。

于 2014-05-27T07:41:02.693 に答える