Dapper 和访问返回空白值

Posted

技术标签:

【中文标题】Dapper 和访问返回空白值【英文标题】:Dapper and access returning blank values 【发布时间】:2017-12-23 16:43:36 【问题描述】:

我正在尝试使用 dapper 从 Access 数据库中提取数据。我定义了以下类以使用我需要读取的访问数据库中的字段。然后我尝试使用下面的代码提取数据。当我运行这个时,只有空白会回来。空格数与数据表中的记录数相匹配。

我尝试使用较短的 sql 字符串得到相同的结果。

我找不到有关此问题的任何信息,有人对此有任何想法吗?

public class DLabResults

    public int ResultsFolderNumber  get; set; 
    public int Request  get; set; 
    public int Release  get; set; 
    public string Formulation  get; set; 
    public string Container  get; set; 
    public string Closure  get; set; 
    public string Shipper  get; set; 
    // public string Label_Back  get; set; 
    // public string Label_Front  get; set; 
    public string FilePath  get; set; 


public void LoadDapperDLabResults(List<DLabResults> items)

    string sql = "";
    //sql = "SELECT tblResults_Results.R_Project_Assignment, tblResults_Results.R_Project_Request, tblResults_Results.R_Project_Release, tblResults_Results.R_Formulation, tblResults_Results.R_Closure, tblResults_Results.R_Container, tblResults_Results.R_Shipper, '' AS Blank1, '' AS Blank2, tblResults_Results.R_Test_FullPath FROM tblResults_Results WHERE(((tblResults_Results.R_Formulation)Like '*' & [Formulation] & '*') AND ((tblResults_Results.R_Closure)Like '*' & [Closure] & '*') AND((tblResults_Results.R_Container)Like '*' & [Container] & '*') AND((tblResults_Results.R_Shipper)Like '*' & [Shipper] & '*')) ORDER BY tblResults_Results.R_Project_Assignment, tblResults_Results.R_Project_Request, tblResults_Results.R_Project_Release;";
    sql = "SELECT * FROM tblResults_Results";
    using (OleDbConnection connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\DavidsoJ\\Desktop\\Fixed Push Workbooks\\Redesigned Databases\\Development Lab Results Database.accdb"))
    
        //var TM2 = connection.Query<DLabResults>(sql).ToList();
        List<DLabResults> TM2 = connection.Query<DLabResults>(sql).ToList();
        //add items to employess    
        if (items == null || items.Count < 1)
        
        
        else
        
            TM2.AddRange(items);
        
        dataGridView1.DataSource = TM2;
    

【问题讨论】:

空白是什么意思?没有填充属性的对象或只是 null 的集合? 长 sql 中的列名似乎与所需对象模型的属性不匹配。 空白我的意思是在datagridview中数据以0 0 0空白空白等形式返回,其中空白意味着那里什么都没有。我将尝试更改对象模型字段名称。 对象模型的属性似乎是关键,当我将其更改为与文件名完全匹配时,它可以正常工作。谢谢! @jrdnoland 另一种选择是更改查询以重命名这样的列Select UglyTableName As NicePropertyName, ... 【参考方案1】:

SQL 查询中的列名似乎与所需对象模型DLabResults 的属性不匹配。

要么更新查询返回的列名以匹配对象

SELECT tblResults_Results.R_Project_Request AS Request
/*, ... code removed for brevity */
FROM tblResults_Results

或更新 DLabResults 属性名称以匹配从查询返回的列名称

public class DLabResults 

    public int R_Project_Request get; set; 

    //... code removed for brevity

无论哪种方式,当使用 dapper 时,列名都需要映射到对象成员,以便 dapper 填充它们。

【讨论】:

以上是关于Dapper 和访问返回空白值的主要内容,如果未能解决你的问题,请参考以下文章

Dapper 可以返回映射对象和其他非映射值吗?

由Dapper QueryMultiple 返回数据的问题得出==》Dapper QueryMultiple并不会帮我们识别多个返回值的顺序

Dapper.net 十进制输出参数不返回精度值

如何使用 Dapper 检索存储过程的返回值

为啥 dapper 在进行选择时为 Guid 返回全零但表中的 guid 值设置正确?

从 SQL 中的存储过程返回值 true 或 false,并在带有 dapper 的 asp core3 中使用它