强类型数据集无法填充,表映射问题? c#.net 2.0

Posted

技术标签:

【中文标题】强类型数据集无法填充,表映射问题? c#.net 2.0【英文标题】:Strongly typed dataset wont fill, table mappings problem? c#.net 2.0 【发布时间】:2009-07-27 16:31:56 【问题描述】:

您之前回答我的其他问题非常出色 - 所以我又来了,需要一些帮助!

我有一个查询,它连接三个表和一个强类型数据集,其中包含为从查询返回的所有内容定义的列。当我去填充数据适配器时,什么都没有填充。我已经从另一种方法中复制了代码,所以我认为没问题 - 唯一的区别是这个查询有连接。任何帮助表示赞赏,代码如下:

查询:

select gsh.locid, locations.description, GSH.workorder, GSH.comstatus, GSH.teststatus, GSH.fireresult, GSH.lightresult, GSH.watercold, GSH.waterhot, GSH.responsedate, GSH.comments, GSH.testername from gsh_vhs_locations locs left outer join locations on locs.maximoloc = locations.location left outer join gsh_vhs_comms GSH on locs.LOCID = GSH.locid where gsh.insertdate > sysdate-7 order by locid, locations.description, GSH.workorder, GSH.comstatus, GSH.teststatus, GSH.fireresult, GSH.lightresult, GSH.watercold, GSH.waterhot, GSH.responsedate, GSH.comments, GSH.testername

代码:

ResponseSheet Tests = new ResponseSheet();
        DataSet ReturData = new DataSet();
        OracleDataAdapter da;
        try
        
            using (OracleConnection conn = new OracleConnection(ConnString))
            
                conn.Open();

                OracleCommand cmd = new OracleCommand();
                cmd.Connection = conn;
    cmd.CommandText = @"select gsh.locid, locations.description, GSH.workorder, GSH.comstatus,      GSH.teststatus, GSH.fireresult, GSH.lightresult, GSH.watercold, GSH.waterhot, GSH.responsedate,     GSH.comments, GSH.testername 
from gsh_vhs_locations locs
left outer join locations on locs.maximoloc = locations.location
left outer join gsh_vhs_comms GSH on locs.LOCID = GSH.locid 
where gsh.insertdate > sysdate-7
order by locid, locations.description, GSH.workorder, GSH.comstatus, GSH.teststatus, GSH.fireresult,        GSH.lightresult, GSH.watercold, GSH.waterhot, GSH.responsedate, GSH.comments, GSH.testername ";

                da = new OracleDataAdapter(cmd.CommandText, conn);

da.MissingMappingAction = MissingMappingAction.Error;
da.TableMappings.Add("Table", "ResponseSheet");
                da.Fill(ReturData, "ResponseSheet");

            

        
        catch (Exception ex)
        
            Console.WriteLine(TimeStamp() + ex.Message.ToString() + "Get Capture Report (TraceCode: 00019)");
        


        return ReturData;
    

如您所见,我已打开表映射的错误报告,但在运行时我没有收到任何错误,只是一个空数据集 (da = null)

任何你能帮到伙计的事情,如果需要的话,只需在我身上随意戳一下谷歌短语 - 谢谢 :)

加雷斯

【问题讨论】:

您已经验证查询确实返回了数据,是吗? 是的,我在 toad 中运行它,它会取回我需要的东西。不过好点,你让我去检查! 为了确保一切正常,最好运行 cmd.ExecuteNonQuery 并检查返回值以确保正在读取行。 【参考方案1】:

尝试处理OnFillError 事件。我不确定它是否会有所帮助,但值得一试。

【讨论】:

【参考方案2】:

在没有连接的情况下尝试一下,看看你是否得到了你期望的结果—— 从 gsh_vhs_comms 中选择 locid,其中 insertdate > sysdate-7 如果填充方法适用于该查询,请尝试添加一个连接并查看它是否会破坏它。 如果是这样,则可能不支持连接。 如果不是,则说明发生了其他事情,并且专注于连接会误导您。

【讨论】:

【参考方案3】:

您应该删除对 conn.Open() 的调用并让 .Fill() 打开连接。现在,您将连接保持打开状态。我不确定这是否是主要问题,但您可能会得到更好的错误报告。

此外,您可以消除 OracleCommand 对象,因为您并没有真正使用它。适配器将创建一个新的 Command 对象。

【讨论】:

好点,在我调试的愤怒中,我最终从各处复制代码。现在整理好了:)谢谢【参考方案4】:

强类型数据集中的列名是否与查询中返回的列名匹配?

【讨论】:

【参考方案5】:

大家好

我发现了问题。

非常抱歉,但由于某种原因,我的 TNSnames 没有为新的开发数据库设置(那天下午确实更改了它,并且漏掉了一封信)

所以它正在击球而我没有发现它。

我觉得自己很傻,不过还是谢谢大家的帮助。

Henk 已经大大整理了我的代码,Beth 让我注意到查询实际上存在问题(连接不正确,但它仍然返回数据)。

再次感谢大家,

加雷斯

编辑:除此之外,表格映射已经失效(晚上睡觉似乎是解决这个问题的关键!)所以供将来参考任何人:

da.MissingMappingAction = MissingMappingAction.Passthrough; da.MissingSchemaAction = MissingSchemaAction.Add;

将所有相关的表映射添加到数据适配器,它现在可以正确填充。

【讨论】:

以上是关于强类型数据集无法填充,表映射问题? c#.net 2.0的主要内容,如果未能解决你的问题,请参考以下文章

c# 强类型数据集,其表适配器未返回预期结果

.NET 表适配器:获取与填充?

以编程方式更改 .net 强类型数据集中的表名

AutoMapper - 强类型数据集

强类型数据集与弱类型数据集

C# .Net CF SqlCeDataAdapter 数据集填充很慢