选择具有连接的对象的属性

时间:2015-09-21 19:48:23

标签: sql-server left-join sqldatareader

我有一个带有一些属性的对象位置(名称,经度,纬度等) 其中一个属性是对象" horizo​​n"。

地平线有一个Dictionary <float,float>(地方地平线上的点azimut-height集)

我想构建一个表来存储对象&#34; place&#34;,我遇到了对象的问题&#34;地平线&#34;

由于我不知道词典中有多少分,我不能为每个点构建一个列。

所以我想我必须创建另一张桌子&#34; dbo.horizo​​ns&#34;列

  • placeName -varChar
  • azimut - real
  • 身高 - 真实

然后使用JOIN选择所有点

但我不了解如何构建命令

如果我接受这样的命令:

SELECT places.name, places.longitude, places.latitude...,                 
horizon.azimut, horizon.height         
FROM places  LEFT JOIN dbo.horizons          
ON places.name = dbo.horizons.namePlace

我怎么看?

我使用dataRedaer.Read()来读取数据库中的一行。

我如何获得所有积分并只建立一个地方?

插入中的相同问题,我如何构建INSERT命令以插入一个地平线

由于

1 个答案:

答案 0 :(得分:1)

有很多方法,但让我们按照你现在的方式行事。

根据您的问题中的查询,您将获得每个地方的多行,因为您的datareader将为与地点关联的每个地平线都有一行。因此,您希望将该位置保留在变量中,并在每次datareader循环到新行时检查它以查看它是否是相同的位置。如果是,则只需将Horizo​​n添加到当前场所。如果它已经改变,那么你知道要开始一个新的地方。

对于INSERT,您将不得不进行多步操作。您无法使用单个命令插入两个表。因此,您将把Place插入Place表,然后将每个Horizo​​ns插入Horizo​​n表。