如何将数据库中的行映射到对象列表中?

问题描述:

以下是对象和.txt文件的示例类,我使用filehelpers创建此类,然后使用FileHelpers读取.txt文件,并将此文件转换为这些对象,然后将它们放入List中。如何将数据库中的行映射到对象列表中?

.txt文件:

1122233 
4455566 

实施例类:

[FixedLengthRecord(FixedMode.AllowLessChars)] 
public class Example 
{ 

    [FieldFixedLength(2)] 
    public string first; 

    [FieldFixedLength(3)] 
    public string second; 

    [FieldFixedLength(2)] 
    public string third; 
} 

与filehelpers读该给我Example.The第一Example.first值的2个对象是 '11' 等 我通过将List转换为DataTable并使用SqlBulkCopy将数据推送到数据库中。这一切顺利。

数据库中的表只包含3列(varchar)与列名;第一,第二和第三。

问题是当我尝试将数据从数据库中获取背部并将其映射回一个名单,我用下面的代码(使用小巧玲珑)本:

IDbConnection connection = new SqlConnection(connectionString); 
var rows = connection.Query<Example>("select * from examplesTable"); 
     foreach (Example e in rows) 
     { 
      examples.Add(e); //List<Example> examples 
     } 

这将返回正确的金额的行,但是如果我尝试从对象中获取数据,它将包含空数据。我无法弄清楚我做错了什么。

+0

“但是,如果我尝试从对象中获取数据” - 该代码的哪一部分引用? – Hughnited

+0

@Hughnited我测试这与添加MessageBox.Show(e.First);到foreach循环,但它什么也没有显示(空窗口)。我也尝试将该列表转换为DataTable并将其推回数据库,结果是它推送了正确数量的行,但数据全为空。 – RedZerg

+0

在foreach中:examples.Add(e); MessageBox.Show(e.First); //返回空白窗口。 – RedZerg

我会检查你有SQL批量插入之前正确加载的数据,然后,你是不是从批量插入得到任何错误。

SQL Management Studio中的表是否有正确的数据?

如果您有正确的数据尝试只读作为数据表来查看返回的内容,因为这将是对象值而不是特定类型。

+0

感谢您的回答。是的,数据加载正确。我通过将它作为DataTable读取来尝试您的提示,并且它工作正常!它显示所有正确的数据。但我需要一个数据对象的列表,所以我试图将该数据表转换为一个列表,并再次显示所有空值。:( – RedZerg

+0

我修正了它,我转换为列表很糟糕。感谢您的想法阅读它作为数据表! – RedZerg

不可能只写foreach (Example e in rows),你应该为Example创建构造函数,它将根据每行的数据创建一个Example对象。它看起来有点像

foreach (DaraRow r in rows) 
     { 
      Example e = new Examaple(r["First"],r["Second"]); 
      examples.Add(e); //List<Example> examples 
     } 
+0

谢谢我会试试这个。 – RedZerg