web-dev-qa-db-fra.com

Copie / insertion en masse SQL en C #

Je suis nouveau sur JSON et SQLBulkCopy. J'ai un JSON formaté POST données que je veux copier/insérer en bloc dans Microsoft SQL en utilisant C #.

Format 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/"
    }]
}

Des classes:

public class UrlData
{
    public List<Url> URLs {get;set;}
}

public class Url
{
    public string url_address {get;set;}
    public string url_name {get;set;}
}

Comment puis-je le faire efficacement?

14
Ali007

S'il ne s'agit que de 10 à 50 URL, insérées rarement, vous pouvez déclencher des instructions d'insertion. Simple et moins de tracas et vous pouvez utiliser quelque chose de simple et rapide comme dapper.

Sinon, si vous voulez la copie en bloc, vous devez d'abord créer et remplir une table de données ADO.NET à partir de votre JSON - de préférence en faisant correspondre le schéma de votre table sql de destination. C'est ton choix.

2
Vivek

Vous devez utiliser Paramètres de valeur de table. si vous utilisez> SQL Server 2005. Vous pouvez avoir un exemple ici

2
Ehsan

En utilisant ce code ci-dessous, vous pouvez convertir List<YourClassname> En 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");

Ici, je suppose que alldata contient un objet list<YourClass> Et vous pouvez également faire - objlist.Add(objYourClass), puis passer sql_TableName Et la table de données dans la méthode SaveDataInTables. Cette méthode insérera toutes les données dans 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();
            }
        }
    }
}

J'espère que ces codes vous aident !!!

0
Nitika Chopra