2011-06-24 18 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(); 
} 

私はエラーを取得しますcmd.ExecuteQueryに:マッピングが、私はGEOMパラメータに.DBTYPEに設定するのか分からない知ら管理プロバイダのネイティブ型

にオブジェクト型SharpMap.Geometries.Polygonから存在していません。

答えて

0

あなたがあなたのコードを変更することができます:

cmd.Parameters.AddWithValue( "GEOM"、geom.AsBinary());

SharpMapのすべてのジオメトリオブジェクトは、AsBinary()およびAsText()メソッドを実装しており、ジオメトリのバイナリ/テキスト表現を返します。あなたのinsertステートメントでは、バイナリ入力を期待するgeometry :: STGeomFromWKB()を使用しています。したがって、AsBinaryメソッドから返されたバイト配列をパラメータの値として渡します。

DbTypeは明らかにVarBinaryになります。

0

geometry::STGeomFromWKB()が取る引数の型を使用する必要があります。ここによると