none
SqlDbType geometry RRS feed

  • Frage

  • hi zusammen, ich hatte schon im englisch sprachigen forum gefragt wie man den sqldbtype geometry setzt.
    Ich benutze aktuell vs2010,framework 4.0 and sql server 2008.

    es wurde nur geantwortet

    Use SqlDbType.Udt , and set the user-defined type to typeof(SqlGeometry)

    Gibt es dafür noch aktuell keine andere Lösung?
    Gruss

    Donnerstag, 10. Februar 2011 09:02

Antworten

  • Hallo Michael,

    meines Wissens haben die Spatial Datentypen noch nicht Einzug in die SqlDbTypes gehalten. 
    Neben der Möglichkeit mit Udt + UdtTypeName zu arbeiten, kann man auch NVarChar verwenden und den Wert aus .STAsText nehmen.

    Dim cnn As New SqlConnection("Server=MeinServer;Initial Catalog=TestDB;Trusted_Connection=TRUE")
    cnn.Open
    
    Dim geo As New SqlGeography 
    geo = SqlGeography.Point(9.44, 52.22, 4326)
    
    Dim cmd As SqlCommand = cnn.CreateCommand
    cmd.CommandText = "INSERT INTO Orte (Geo) VALUES (@Geo);"
      
    Dim para as SqlParameter = cmd.CreateParameter
    para.ParameterName = "Geo"
    cmd.Parameters.Add(para)
    
    ' Als WKT
    cmd.Parameters(0).SqlDbType = System.Data.SqlDbType.NVarChar
    cmd.Parameters(0).Value = geo.STAsText
    cmd.ExecuteNonQuery()
    
    ' Als UDT
    cmd.Parameters(0).SqlDbType = System.Data.SqlDbType.Udt
    cmd.Parameters(0).UdtTypeName = "geography"
    cmd.Parameters(0).Value = geo
    cmd.ExecuteNonQuery()
    
    

    Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de
    Donnerstag, 10. Februar 2011 10:35

Alle Antworten

  • Hallo Michael,

    meines Wissens haben die Spatial Datentypen noch nicht Einzug in die SqlDbTypes gehalten. 
    Neben der Möglichkeit mit Udt + UdtTypeName zu arbeiten, kann man auch NVarChar verwenden und den Wert aus .STAsText nehmen.

    Dim cnn As New SqlConnection("Server=MeinServer;Initial Catalog=TestDB;Trusted_Connection=TRUE")
    cnn.Open
    
    Dim geo As New SqlGeography 
    geo = SqlGeography.Point(9.44, 52.22, 4326)
    
    Dim cmd As SqlCommand = cnn.CreateCommand
    cmd.CommandText = "INSERT INTO Orte (Geo) VALUES (@Geo);"
      
    Dim para as SqlParameter = cmd.CreateParameter
    para.ParameterName = "Geo"
    cmd.Parameters.Add(para)
    
    ' Als WKT
    cmd.Parameters(0).SqlDbType = System.Data.SqlDbType.NVarChar
    cmd.Parameters(0).Value = geo.STAsText
    cmd.ExecuteNonQuery()
    
    ' Als UDT
    cmd.Parameters(0).SqlDbType = System.Data.SqlDbType.Udt
    cmd.Parameters(0).UdtTypeName = "geography"
    cmd.Parameters(0).Value = geo
    cmd.ExecuteNonQuery()
    
    

    Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de
    Donnerstag, 10. Februar 2011 10:35
  • Hallo michael floeter,

    Hat Dir die Antwort geholfen?

    Grüße,
    Robert

    Mittwoch, 16. Februar 2011 07:53
    Moderator
  • Ja,danke. Ist zwar blöd das es noch nicht in den Types drin ist. Aber es klappt erstmal.
    Donnerstag, 17. Februar 2011 14:42