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

时间:2009-07-27 16:31:56

标签: c# .net oracle strongly-typed-dataset tableadapter

你以前对我的其他问题一直表现非常出色 - 所以我又来了,需要一些帮助!

我有一个连接三个表和一个强类型数据集的查询,该数据集具有为从查询返回的所有内容定义的列。当我去填充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短语 - 谢谢:)

加雷

5 个答案:

答案 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;

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