problem
when get data from json file for master it work but details not work ?
i work on web application asp.net core 2.1 i get data as json then concatenate them for master and details and there are another layer will execute it .
i success generate insert statement on master
but details cannot do
so that i need to add details with master
{"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 :
// generated success
INSERT INTO master_table(id, branch_id, name, address, phone) VALUES(@id, @branch_id, @name, @address, @phone);
// generated problem
insert into detail1_table(id,branch_id,LineNumber,ItemCode,Quantity,Price,Total) values (@id,@branch_id,@LineNumber,@ItemCode,@Quantity,@Price,@Total)
// generated problem
insert into detail1_table(id,branch_id,LineNumber,ItemCode,Quantity,Price,Total) values (@id,@branch_id,@LineNumber,@ItemCode,@Quantity,@Price,@Total)
What I have tried:
publicstaticclassJsonHelper{publicstaticstringGetInsertStatement(JToken mastertoken){returnstring.Format("INSERT INTO {0}({1}) VALUES({2});", mastertoken["table"],GetFieldParameterNames(mastertoken),GetFieldParameterNames(mastertoken,false));}staticstringGetFieldParameterNames(JToken mastertoken,bool fieldOnly =true){string p = fieldOnly ?string.Empty:"@";returnstring.Concat(string.Join(", ", mastertoken["keys"].Cast<JProperty>().Select(jp => p + jp.Name)),", ",string.Join(", ", mastertoken["fields"].Cast<JProperty>().Select(jp => p + jp.Name)));}publicstaticList<SqlParameter>GetSqlParams(JToken mastertoken){List<SqlParameter> para =newList<SqlParameter>();foreach(JToken jt in mastertoken["keys"]) para.Add(newSqlParameter("@"+ jt.ToObject<JProperty>().Name, jt.First));foreach(JToken jt in mastertoken["fields"]) para.Add(newSqlParameter("@"+ jt.ToObject<JProperty>().Name, jt.First));return para;}publicstaticstringGetInsertStatmentText(stringJsonData){stringInsert="";JObject jo =JObject.Parse(JsonData);JToken m = jo["master"];string connectionstring ="Server=sdfff-PC\\SQL2014;Database=sqlm;User Id=sa;Password=abc123;";//change connection stringusing(SqlConnection connection =newSqlConnection(connectionstring)){using(SqlCommand command =newSqlCommand(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;}}returnInsert;} program.csstaticvoidMain(string[] args){stringJsonData=File.ReadAllText("D:\\2.json");string insertStatment =JsonHelper.GetInsertStatmentText(JsonData);}