强类型数据集无法填充,表映射问题? 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的主要内容,如果未能解决你的问题,请参考以下文章