0

我正在向旧的 VB6 应用程序添加功能。我们正在使它对地理空间更加友好。我已经通过升级到 SQL Server 2012 Express 完成了数据库端的更改,并且正在尝试使用geography数据类型。

在 VB6 中,我有一段看起来像这样的代码(是的,我知道 Latitude 拼写错误):

rsGeoref![Lattitude] = IIf(dblLatitude <> "", Val(dblLatitude), Null)
rsGeoref![LatDirection] = IIf(strLatDirection = "", Null, strLatDirection)
rsGeoref![LatDegrees] = IIf(dblLatDegrees <> "", Val(dblLatDegrees), Null)

这是修改一个 RecordSet,然后稍后使用以下命令将其推回数据库:

rsGeoref.Update

所以我现在有一个名为 GeogSpatial 的字段,它使用 SQL Server 2012 中的geography数据类型。我想以同样的方式更新它。这不起作用:

rsGeoref![GeogSpatial] = "geography::STGeomFromText('POINT(" + CStr(dblSignedLong) + " " + CStr(dblSignedLat) + ")', 4326)"

我相信错误来自使用 SQL 存储过程geography::STGeomFromText。如果是这样,我是否有更好的方法来做到这一点,而不必将整个部分重写为单一的 SQL 查询?

4

1 回答 1

1

我不确定您是否可以将记录集中的字段值设置为表示对 SQL 存储过程/函数的调用的字符串文字,并将其作为 SQL 代码执行。它将尝试做的只是将该字段设置为字符串文字,如果无法将字符串转换为字段的类型,您很可能会在运行时收到类型不匹配错误。

我用等效的设置测试了这个理论,但是使用了对分配给日期时间字段而不是 STGeomFromText 的 GetDate() 的调用。正如我想象的那样失败了,因为无法将文本“GetDate()”分配给日期时间。

于 2013-01-15T00:27:33.820 回答