你以前对我的其他问题一直表现非常出色 - 所以我又来了,需要一些帮助!
我有一个连接三个表和一个强类型数据集的查询,该数据集具有为从查询返回的所有内容定义的列。当我去填充dataadapter时,没有任何东西被填满。我已经从另一个方法复制了代码,所以我认为它没关系 - 唯一的区别是这个查询有连接。任何帮助表示赞赏,代码如下:
查询:
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)
任何你可以帮助的人,如果需要的话,只需随便点一下google短语 - 谢谢:)
加雷
答案 0 :(得分:1)
尝试处理OnFillError事件。我不确定它会有所帮助,但值得一试。
答案 1 :(得分:1)
你应该删除对conn.Open()的调用,然后让.Fill()打开连接。现在你正在打开连接。我不确定这是否是主要问题,但您可能会得到更好的错误报告。
此外,您可以删除OracleCommand对象,因为您实际上并未使用它。适配器将创建一个新的Command对象。
答案 2 :(得分:1)
在没有连接的情况下尝试它,看看你是否得到了你期望的结果 - 从gsh_vhs_comms中选择locid,其中insertdate> SYSDATE-7 如果fill方法适用于该查询,请尝试添加一个连接,看看它是否会破坏它。 如果是,则可能不支持联接。 如果没有,那么还有其他事情发生,关注连接会误导你。
答案 3 :(得分:1)
强类型数据集中的列名是否与查询中返回的列名匹配?
答案 4 :(得分:0)
好的家伙
我发现了这个问题。
我很抱歉,但由于某种原因,我的TNSnames没有设置为新的开发数据库(当天下午改了,并且错过了一封信)
所以它击中了捕获物而我没有发现它。
我觉得非常愚蠢,但无论如何,谢谢大家的帮助。
Henk已经大大整理了我的代码,Beth让我注意到查询实际上存在问题(连接不正确,但仍会返回数据)。
再次感谢所有人,
加雷
编辑:除此之外,表格映射已经完成(一夜之间的睡眠似乎是解决这个问题的关键!)所以未来可以参考任何人:
da.MissingMappingAction = MissingMappingAction.Passthrough; da.MissingSchemaAction = MissingSchemaAction.Add;
将所有相关的表映射添加到数据适配器,它现在正确填充。