【问题标题】:Strongly typed dataset wont fill, table mappings problem? c#.net 2.0强类型数据集无法填充,表映射问题? 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 并检查返回值以确保正在读取行。

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


【解决方案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;

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-04
          • 2011-06-27
          • 1970-01-01
          • 2016-07-20
          • 2011-01-14
          • 2013-01-07
          相关资源
          最近更新 更多