2016-05-28 4 views
0

これでちょっと検索していて、あまり運がなかった。だからここに私がやろうとしていることがあります。C#およびユーザー定義の型をプロシージャのパラメータでSQLサーバーに渡す

基本的に私はGEOJson構造の形式でいくつかのC#モデルを持っています。だから私は新しい機能やfeatureCollectionsなどを作成することができます。私はそれを直列化すると、それはいくつかのきれいにフォーマットされたGEOJsonを吐き出す。

これをデータベースに保存したいと思います。これを行うために、私は単に、モデル全体(FeatureCollectionまたは個々のFeature ...)をストアドプロシージャに渡すだけで、プロシージャは値のプッシュを処理する必要がある場所に対応します。 SQL Serverでこれを行うことは可能ですか?私はSQL Serverを少し新しくしており、主にOracleと協力してきましたが、過去にOracleのユーザー定義型を使用しています。しかし、SQLサーバが同様のことをすることができるかどうかは分かりません。以下のような...私は単にいくつかの方法でSQL Serverには、この権利のモデル全体を渡すように考えていたアプリケーション層で、その後

{ 
    "type" : "FeatureCollection", 
    "features" : [{ 
      "Type" : "Feature", 
      "Properties" : { 
       "name" : null, 
       "description" : "Some Site Boundaries", 
       "featureId" : 12, 
       "featureTypeCode" : "siteboundary", 
       "locationHierarchy" : { 
        "city" : { 
         "shortName" : "Long Beach", 
         "longName" : "Long Beach", 
         "hierarchyId" : 7, 
         "hierarchyParentId" : 4 
        }, 
        "state" : { 
         "shortName" : "CA", 
         "longName" : "California", 
         "hierarchyId" : 4, 
         "hierarchyParentId" : 3 
        }, 
        "country" : { 
         "shortName" : "U.S.A", 
         "longName" : "United States of America", 
         "hierarchyId" : 3, 
         "hierarchyParentId" : 2 
        } 
       }, 
       "floors" : [] 
      }, 
      "Geometry" : { 
       "type" : "Polygon", 
       "coordinates" : [[[-118.1400864, 33.8324338], [-118.1401331, 33.8148000], [-118.1675695, 33.8148116], [-118.1677493, 33.8324253], [-118.1400864, 33.8324338]]] 
      } 
     }, { 
      "Type" : "Feature", 
      "Properties" : { 
       "name" : null, 
       "description" : "Some place", 
       "featureId" : 71, 
       "featureTypeCode" : "siteboundary", 
       "locationHierarchy" : { 
        "city" : { 
         "shortName" : "St Louis", 
         "longName" : "St Louis", 
         "hierarchyId" : 8, 
         "hierarchyParentId" : 6 
        }, 
        "state" : { 
         "shortName" : "MO", 
         "longName" : "Missouri", 
         "hierarchyId" : 6, 
         "hierarchyParentId" : 3 
        }, 
        "country" : { 
         "shortName" : "U.S.A", 
         "longName" : "United States of America", 
         "hierarchyId" : 3, 
         "hierarchyParentId" : 2 
        } 
       }, 
       "floors" : [] 
      }, 
      "Geometry" : { 
       "type" : "Polygon", 
       "coordinates" : [[[-90.3590381, 38.7637456], [-90.3390834, 38.7637456], [-90.3390834, 38.7474431], [-90.3590381, 38.7474431], [-90.3590381, 38.7637456]]] 
      } 
     }, { 
      "Type" : "Feature", 
      "Properties" : { 
       "name" : null, 
       "description" : null, 
       "featureId" : 140, 
       "featureTypeCode" : "siteboundary", 
       "locationHierarchy" : { 
        "city" : { 
         "shortName" : "Mesa", 
         "longName" : "Mesa", 
         "hierarchyId" : 9, 
         "hierarchyParentId" : 5 
        }, 
        "state" : { 
         "shortName" : "AZ", 
         "longName" : "Arizona", 
         "hierarchyId" : 5, 
         "hierarchyParentId" : 3 
        }, 
        "country" : { 
         "shortName" : "U.S.A", 
         "longName" : "United States of America", 
         "hierarchyId" : 3, 
         "hierarchyParentId" : 2 
        } 
       }, 
       "floors" : [] 
      }, 
      "Geometry" : { 
       "type" : "Polygon", 
       "coordinates" : [[[-111.7369067, 33.4783391], [-111.7368442, 33.4653505], [-111.7170835, 33.4653505], [-111.7170835, 33.4782348], [-111.7369067, 33.4783391]]] 
      } 
     } 
    ] 
} 

:ここ

は私のJSONシリアライズさは次のようになります。 :

public int CreateFeature(Feature json) 
     { 
      string result = string.Empty; 
      int row; 
      using (SqlConnection conn = new SqlConnection(_smmConnectionString)) 
      using (SqlCommand cmd = new SqlCommand("dbo.CreateFeature", conn)) 
      { 
       cmd.CommandType = CommandType.StoredProcedure; 

       // set up the parameters 
       //cmd.Parameters.Add("@parm1in", SqlDbType.VarChar, 7); 
       cmd.Parameters.Add("@Json", SqlDbType.Structured); 

       // set parameter values 
       cmd.Parameters["@Json"].Value = json; 

       conn.Open(); 
       row = cmd.ExecuteNonQuery(); 
       conn.Close(); 
      } 
      return row; 
     } 

それから私は、SQL Serverの手順は、単純にその変数をキャッチし、必要に応じてそれを解析することができます考えた:

SELECT @Json.feature[0].Type; 

など.....

これは可能ですか?

+0

を? 2016年以降、SQL ServerにネイティブなJSONサポートが提供されます(ある程度まで)。リリース日までCTPを見つけて遊ぶことが可能だと思います。 –

+0

ええ、私はそれを読んで... OPENJSON私は信じています。しかし、2016年を実行していないので、そのオプションは外です。私は、これを理解しようと時間を無駄にするのではなく、単に貧しい人のやり方をして、必要に応じてそれぞれを使用して、必要なパラメータで手続きを作成するつもりだと思います。真実は、 "それ"多くはないと言われます。私はちょうどこれをやって、新しいことを学ぶ滑らかな方法を持っていたかった:) – dvsoukup

答えて

0

なぜEntity Frameworkを使用しないのですか?

これは、ストアドプロシージャ内にデータストアロジック全体を作成することで可能ですが、これを行わないことをお勧めします。ストアドプロシージャを記述して維持することは、常に苦痛です。ストアドプロシージャを使用する主な理由の1つは、DBサーバーにキャッシュされているため、非常に集中的なデータベース使用と大量の反復操作の必要性です。これがあなたの事件かどうかわかりませんか?

あなたはここでそれについて読むことができます:あなたが使用しているSQL Serverのバージョンhttp://www.seguetech.com/blog/06/04/Advantage-drawbacks-stored-procedures-processing-data

+0

EFのファンではない – dvsoukup

関連する問題