私はJSONとSQLBulkCopyが初めてです。 JSON形式のPOST C#を使用してMicrosoft SQLに一括コピー/挿入するデータがあります。
JSON形式:
{
"URLs": [{
"url_name": "Google",
"url_address": "http://www.google.com/"
},
{
"url_name": "Yahoo",
"url_address": "http://www.yahoo.com/"
},
{
"url_name": "FB",
"url_address": "http://www.fb.com/"
},
{
"url_name": "MegaSearches",
"url_address": "http://www.megasearches.com/"
}]
}
クラス:
public class UrlData
{
public List<Url> URLs {get;set;}
}
public class Url
{
public string url_address {get;set;}
public string url_name {get;set;}
}
どうすれば効率的にできますか?
挿入される頻度が10〜50のURLのみの場合、挿入ステートメントを実行できます。シンプルで手間がかからず、dapperのような簡単で迅速なものを使用できます。
それ以外の場合、一括コピーが必要な場合は、最初にJSONからADO.NETデータテーブルを作成して入力する必要があります(できれば、宛先SQLテーブルのスキーマと一致する必要があります)。それはあなたの選択です。
> = sql server 2005を使用している場合は、 Table valued parameters。 を使用する必要があります。例 here
以下のコードを使用して、List<YourClassname>
をDataTableに変換できます。
List<YourClass> objlist = alldata;
string json = Newtonsoft.Json.JsonConvert.SerializeObject(objlist);
DataTable dt = Newtonsoft.Json.JsonConvert.DeserializeObject<DataTable>(json);
SaveDataInTables(dt, "Table_Name_Of_SQL");
ここでは、すべてのデータにlist<YourClass>
オブジェクトが含まれていると想定しています。また、objlist.Add(objYourClass)
を実行し、sql_TableName
およびデータテーブルをSaveDataInTables
メソッドに渡すこともできます。このメソッドは、SQL_Table
にすべてのデータを挿入します。
public void SaveDataInTables(DataTable dataTable, string tablename)
{
if (dataTable.Rows.Count > 0)
{
using (SqlConnection con = new SqlConnection("Your_ConnectionString"))
{
using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
{
sqlBulkCopy.DestinationTableName = tablename;
con.Open();
sqlBulkCopy.WriteToServer(dataTable);
con.Close();
}
}
}
}
これらのコードがお役に立てば幸いです!!!