Как изменить 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[^]