problem
when get data from json file for master it work but details not work ?
{
"master" : {
"table" : "master_table",
"fields" : {
"name" : "bar",
"address" : "fleet street",
"phone" : "555"
},
"keys":{
"id" : 1,
"branch_id" : 1
}
},
"details" : [
{
"table": "detail1_table",
"keys":{
"id" : 1,
"branch_id" : 1 ,
"LineNumber" : 1
},
"fields" : {
"ItemCode" : "item-5050",
"Quantity" : 10 ,
"Price" : 50 ,
"Total" : 500
}
},
{
"table": "detail1_table",
"keys":{
"id" : 1,
"branch_id" : 1 ,
"LineNumber" : 2
},
"fields" : {
"ItemCode" : "item-9050",
"Quantity" : 5 ,
"Price" : 20 ,
"Total" : 100
}
}
]
}
Expected Result is 3 statement insert
INSERT INTO master_table(id, branch_id, name, address, phone) VALUES(@id, @branch_id, @name, @address, @phone);
insert into detail1_table(id,branch_id,LineNumber,ItemCode,Quantity,Price,Total) values (@id,@branch_id,@LineNumber,@ItemCode,@Quantity,@Price,@Total)
insert into detail1_table(id,branch_id,LineNumber,ItemCode,Quantity,Price,Total) values (@id,@branch_id,@LineNumber,@ItemCode,@Quantity,@Price,@Total)
not generated
What I have tried:
public static class JsonHelper
{
public static string GetInsertStatement(JToken mastertoken)
{
return string.Format("INSERT INTO {0}({1}) VALUES({2});",
mastertoken["table"],
GetFieldParameterNames(mastertoken),
GetFieldParameterNames(mastertoken, false));
}
static string GetFieldParameterNames(JToken mastertoken, bool fieldOnly = true)
{
string p = fieldOnly ? string.Empty : "@";
return string.Concat(string.Join(", ", mastertoken["keys"].Cast<JProperty>().Select(jp => p + jp.Name)),
", ", string.Join(", ", mastertoken["fields"].Cast<JProperty>().Select(jp => p + jp.Name)));
}
public static List<SqlParameter> GetSqlParams(JToken mastertoken)
{
List<SqlParameter> para = new List<SqlParameter>();
foreach (JToken jt in mastertoken["keys"])
para.Add(new SqlParameter("@" + jt.ToObject<JProperty>().Name, jt.First));
foreach (JToken jt in mastertoken["fields"])
para.Add(new SqlParameter("@" + jt.ToObject<JProperty>().Name, jt.First));
return para;
}
public static string GetInsertStatmentText(string JsonData)
{
string Insert = "";
JObject jo = JObject.Parse(JsonData);
JToken m = jo["master"];
string connectionstring = "Server=sdfff-PC\\SQL2014;Database=sqlm;User Id=sa;Password=abc123;";
using (SqlConnection connection = new SqlConnection(connectionstring))
{
using (SqlCommand command = new SqlCommand(JsonHelper.GetInsertStatement(m), connection))
{
connection.Open();
List<SqlParameter> lsp = JsonHelper.GetSqlParams(jo["master"]);
foreach (SqlParameter sqp in lsp)
command.Parameters.Add(sqp);
Insert = command.CommandText;
}
}
return Insert;
}
program.cs
static void Main(string[] args)
{
string JsonData = File.ReadAllText("D:\\2.json");
string insertStatment = JsonHelper.GetInsertStatmentText(JsonData);
}