2011-06-24 127 views
0

我試圖插入一個特徵數據 - 多邊形到SQL 2008的ID型:爲nvarchar,GEOM =>類型:幾何SQL插入數據

這裏是我的代碼:

foreach (FeatureDataRow dsRow in ds.Tables[0]) 
{ 
    string ID = (string)dsRow["Name"]; 
    SharpMap.Geometries.Polygon geom = (SharpMap.Geometries.Polygon)dsRow.Geometry; 

    SqlConnection con = new SqlConnection(MapHelper.GetSQLConnectionString()); 
    string cmdStr = "INSERT INTO table1 (ID, geom) VALUES (@ID, geometry::STGeomFromWKB(@geom))"; 
    SqlCommand cmd = new SqlCommand(cmdStr, con); 

    //Store parameters with values to the collection 
    cmd.Parameters.AddWithValue("ID", ID); 
    cmd.Parameters.AddWithValue("geom", geom); //.DBType ??? 

    con.Open(); 
    cmd.ExecuteNonQuery(); 
    con.Close(); 
} 

我得到一個錯誤on cmd.ExecuteQuery:從對象類型SharpMap.Geometries.Polygon到已知的託管提供程序本機類型不存在映射

我不知道要爲geom參數設置.DBTYPE。

回答

0

你可以更改您的代碼:

cmd.Parameters.AddWithValue( 「GEOM」,geom.AsBinary());

SharpMap中的所有幾何對象都實現AsBinary()和AsText()方法,它們將返回幾何圖形的二進制/文本表示。在你的insert語句中,你正在使用geometry :: STGeomFromWKB(),它需要二進制輸入。因此,傳遞由AsBinary方法返回的字節數組作爲參數的值。

DbType顯然是VarBinary。

0

您應該使用geometry::STGeomFromWKB()所採用的參數類型。