我正在调用一个输出JSON
有效负载的web服务,JSON
字符串具有productName、packageId和webReferenceId。调用web服务时,productName将作为查询字符串传递。我能够传递查询字符串并检索具有productName、packageId和webReferenceIdJSON
负载,如下所示。
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
输出中的packageId、webReferenceId来更新SQL
表。我正在将JSON
的结果读取到DataReader
中,但不确定如何UPDATE
SQL
表。
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
对象将使用DataTable
或IDataReader
,并将内容批量上传到您的表中。
// 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任务,而不是提取大量数据,将其全部匹配并推回。