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 :
- // 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:
- 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
().Select(jp => p + jp.Name)), - ", ", string.Join(", ", mastertoken["fields"].Cast
().Select(jp => p + jp.Name))); - }
- public static List
GetSqlParams(JToken mastertoken) - {
- List
para = new List (); - foreach (JToken jt in mastertoken["keys"])
- para.Add(new SqlParameter("@" + jt.ToObject
().Name, jt.First)); - foreach (JToken jt in mastertoken["fields"])
- para.Add(new SqlParameter("@" + jt.ToObject
().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;"; //change connection string
- using (SqlConnection connection = new SqlConnection(connectionstring))
- {
- using (SqlCommand command = new SqlCommand(JsonHelper.GetInsertStatement(m), connection))
- {
- connection.Open();
- List
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);
- }
ahmed elbarbaryPosted Aug 15, 2019, 3:22 AM
Nilesh SawardekarPosted Aug 14, 2019, 11:35 PM