web-dev-qa-db-ja.com

C#でのSQL一括コピー/挿入

私は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;}
}

どうすれば効率的にできますか?

14
Ali007

挿入される頻度が10〜50のURLのみの場合、挿入ステートメントを実行できます。シンプルで手間がかからず、dapperのような簡単で迅速なものを使用できます。

それ以外の場合、一括コピーが必要な場合は、最初にJSONからADO.NETデータテーブルを作成して入力する必要があります(できれば、宛先SQLテーブルのスキーマと一致する必要があります)。それはあなたの選択です。

2
Vivek

> = sql server 2005を使用している場合は、 Table valued parameters。 を使用する必要があります。例 here

2
Ehsan

以下のコードを使用して、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();
            }
        }
    }
}

これらのコードがお役に立てば幸いです!!!

0
Nitika Chopra