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

これで、SQL Server 2012 のgeographyデータ型を使用する GeogSpatial というフィールドができました。同じ方法で更新したいと思います。これは機能しません:

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 に答える