これでちょっと検索していて、あまり運がなかった。だからここに私がやろうとしていることがあります。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;
など.....
これは可能ですか?
を? 2016年以降、SQL ServerにネイティブなJSONサポートが提供されます(ある程度まで)。リリース日までCTPを見つけて遊ぶことが可能だと思います。 –
ええ、私はそれを読んで... OPENJSON私は信じています。しかし、2016年を実行していないので、そのオプションは外です。私は、これを理解しようと時間を無駄にするのではなく、単に貧しい人のやり方をして、必要に応じてそれぞれを使用して、必要なパラメータで手続きを作成するつもりだと思います。真実は、 "それ"多くはないと言われます。私はちょうどこれをやって、新しいことを学ぶ滑らかな方法を持っていたかった:) – dvsoukup