ahmed_sa Ответов: 0

Как изменить getselectstatement, чтобы получить оператор inner join select ?


Как изменить GetSelectStatement, чтобы получить оператор inner join select ?
как показано ниже :
select FooterTable.ItemCode,FooterTable.Quantity,FooterTable.UniPrice from

MasterTable inner join FooterTable on MasterTable.Serial=FooterTable.Serial,MasterTable.BranchCode=FooterTable.BranchCode,MasterTable.Year=FooterTable.Year

where MasterTable.Serial=10 AND MasterTable.Year=2019 AND MasterTable.BranchCode=1


json строка я генерирую sql из нее
{ 
   "Details":{ 
      "table":[ 
         "MasterTable",
         "FooterTable"
      ],
      "fields":{ 
         "ItemCode":"string",
         "Quantity":"int",
         "Price":"decimal"
         
      },
      "keys":{ 
         "BranchCode":1,
         "Year":2019,
         "Serial":2
      }
   }
}

Как это сделать пожалуйста измените код выше

Что я уже пробовал:

public string GetSelectStatement(string JsonDataForSelect)
{
var root = (JObject)JsonConvert.DeserializeObject(JsonDataForSelect);
var query = "";
var items = root.SelectToken("Details").Children().OfType<JProperty>().ToDictionary(p => p.Name, p => p.Value);
foreach (var item in items)
{
if (item.Key == "table")
{
var tableName = item.Value;
query = string.Format("select from table {0} inner join table{1} where", tableName);
}
else if (item.Key == "keys")
{
var key = item.Value.SelectToken("").OfType<JProperty>().ToDictionary(p => p.Name, p => p.Value);
var count = 0;
foreach (var id in key)
{
count++;
if (count == key.Count())
{
query += string.Format("{0} = {1}", id.Key, id.Value);
}
else
{
query += string.Format("{0} = {1} and ", id.Key, id.Value);
}
}

}
}
return query;
}

MadMyche

И что это генерирует для оператора SQL? Что произойдет, если вы запустите его? Видите ли вы проблему, и если да, то в чем она заключается?

ahmed_sa

проблема на заявление выше не возвращает оператор SELECT внутреннее присоединиться к другой таблице
но если я буду работать с одной таблицей это сработает
не могли бы вы помочь мне получить заявление select
выберите нижний колонтитул.Артикул,FooterTable.Количество,Нижний Колонтитул.UniPrice от

MasterTable внутреннее соединение нижнего колонтитула на MasterTable.Серийный Номер=Нижний Колонтитул.Серийный Номер,Мастер-Таблица.BranchCode=Нижний Колонтитул.Код Ветви,Мастер-Таблица.Год=Нижний Колонтитул.Год

где мастер-стол.Серийный номер=10 и мастер-таблица.Год=2019 и MasterTable.Код ветви=1
из функции csharp getselectstatment

[no name]

Во-первых, десериализуйте свой json в a .Чистый объект с JavaScriptSerializer или JsonConvert.DeserializeObject

Затем петли через JSON-объект (в настоящее время .Net format), и с этими значениями постройте операторы запроса, чтобы делать то, что вы хотите с этими значениями.

Richard Deeming

Поставив на место WHERE значения условий в JSON и возвращая запрос в виде строки, вы пишете код, который будет уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]

0 Ответов