使用C#从JSON更新SQL表



我正在调用一个输出JSON有效负载的web服务,JSON字符串具有productNamepackageIdwebReferenceId。调用web服务时,productName将作为查询字符串传递。我能够传递查询字符串并检索具有productNamepackageIdwebReferenceIdJSON负载,如下所示。

JSON:

{
"product": [
{           
"product": "adc",
"pkgid": 1124245,
"wrfid": 5387612
}
]
}

使用以下C#代码来检索JSON有效载荷。

C#:

var jsondata = new WebClient();
string prdcode = jsondata.DownloadString(new Uri(url));
JavaScriptSerializer jss = new JavaScriptSerializer
{
MaxJsonLength = Int32.MaxValue
};
Rootobject ro = jss.Deserialize<Rootobject>(prdcode);

现在,我必须使用JSON输出中的packageIdwebReferenceId来更新SQL表。我正在将JSON的结果读取到DataReader中,但不确定如何UPDATESQL表。

DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("packageId", typeof(int)));
dt.Columns.Add(new DataColumn("webReferenceId", typeof(int)));
DataRow dr = dt.NewRow();
foreach (var product in ro.data)
{
dr["packageId"] = product.pkgid;
dr["webReferenceId"] = product.wrfid;
}

实现这一点的"最佳"方法将取决于您期望处理的行数。如果只有几行,那么继续使用一系列参数化的INSERT INTO...命令插入它们。

对于更大的列表,SqlBulkCopy对象将使用DataTableIDataReader,并将内容批量上传到您的表中。

// abstracting the setup for brevity - you can write these :)
var source = LoadDataTable();
var connection = GetSqlConnection();
// now the bulk copy:
using (var bulk = new SqlBulkCopy(connection))
{
bulk.DestinationTableName = "your_table";
bulk.WriteToServer(source);
}

这将尝试将行直接转储到表中。如果数据类型等有任何不同,那么插入将失败,并显示一条错误消息,(希望(能解释出了什么问题。

您必须确保源数据不违反任何约束,例如复制现有主键等,并且它与目标表的格式匹配。

根据您的用例,将数据加载到临时表(临时表或其他表(中,然后使用MERGE更新最终目标可能会有所帮助。这可以帮助处理主键冲突等。它还允许您在SQL服务器本身上对查询和存储过程执行一些ETL任务,而不是提取大量数据,将其全部匹配并推回。

最新更新