【问题标题】:NPOCO Fetch - Object must implement IConvertibleNPOCO Fetch - 对象必须实现 IConvertible
【发布时间】:2014-04-29 09:23:16
【问题描述】:

这是我第一次尝试使用 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]()

剪辑...

为什么?以及如何解决?

// 安德斯

【问题讨论】:

    标签: c# sql-server npoco


    【解决方案1】:

    取决于您的堆栈跟踪,它需要您的 POCO 属性必须实现 IConvertible,而 TimeSpan 没有。

    【讨论】:

    • 啊哈!关于我如何为时间戳实现 IConvertible 的任何建议、链接或..?
    • 数据类型:time(7)
    • 我遇到了同样的 Iconvertible 错误,这是因为 SQL Server 中的数据库列具有唯一标识符类型。它无法使用 npoco 将其映射到 C# 中的字符串。我修复了将 C# 类型更改为 Guid 的问题
    【解决方案2】:

    您可能已经解决了它,但问题可能是您正在从数据库中获取数据类型为 TIME 的列,并尝试将其映射到 C# 类中数据类型为 DATETIME 的属性。如果是这样,请在 C# 代码中将数据类型更改为 TIMESPAN,我相信它应该可以工作。

    【讨论】:

      猜你喜欢
      • 2012-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多