Итак, я гуглил и искал ... Есть ли простой способ сравнить структуру таблицы таблицы SQL с данными CLR?
Вот проблема: у нас есть API, который возвращает JSON, который постоянно развивается.Когда возвращаемый массив содержит новые объекты, мы хотели бы сообщить вызывающей стороне, что доступно больше данных.
Мы можем довольно легко получить схему SQL с помощью запроса:
select COLUMN_NAME,ORDINAL_POSITION
from information_schema.columns
where table_name = 'ApiWork'
Но как можномы сравниваем столбец / порядковый номер с DataTable, содержащим массив JSON?Типичный возвращаемый массив будет выглядеть следующим образом:
{"Index_0":"930477","Index_1":"test789","ArrayID":"1","Result":"OK","Order_ID":"930477","Model_Number":"FGHB2868TF","Ship_Date":"05/30/2018","Allocated":0,"Backordered":1,"Amount":0}
И мы можем построить таблицу данных с десериализатором json или с циклом:
DataTable dt = new DataTable();
SqlPipe pipe = SqlContext.Pipe;
String d = "";
String col = "";
int l = 0;
int l2 = 0;
int s = 0;
int s2 = 0;
o = "{\"Index_0\":\"930477\",\"Index_1\":\"test789\",\"ArrayID\":\"1\",\"Result\":\"OK\",\"DMI_Order_ID\":\"930477\",\"Model_Number\":\"FGHB2868TF\",\"Ship_Date\":\"05/30/2018\",\"Allocated\":0,\"Backordered\":1,\"Amount\":0}";
int c = o.Length;
while (c > 0)
{
col = o.Substring(0, o.IndexOf(":")).Replace("\"", "").Replace("{", "").Replace("}", "").Replace("[", "").Replace("]", "");
dt.Columns.Add(col);
l = o.IndexOf(":");
l = l + 1;
s = o.Length - l;
o = o.Substring(l,s); // here we have removed the name portion
l2 = o.IndexOf(",");
l2 = l2 + 1;
s2 = o.Length - l2;
o = o.Substring(l2, s2); // here we have removed the value of the previous name
c = o.Length;
if (o.IndexOf(":") == -1 && o.IndexOf(",") == -1)
{
c = 0;
}
}
Я полагаю, что зацикливание позволяет контролироватьординала также, если бы это было необходимо, но, как я уже упоминал в одном из моих комментариев, это не совсем необходимо.