Конкретная ошибка, которую вы получаете:
Было предоставлено больше ограничений, чем поддерживает запрашиваемая схема [таблицы].
связано с тем, что для коллекции Tables
требуется3
ограничения: база данных, владелец и таблица.
Однако следующая проблема, с которой вы сталкиваетесь, даже если restrictions
был определен как:
var restrictions = new string[3];
, этот код получит только схемудля последней таблицы в TablesOfInterest
:
foreach (string s in GetMetaData())
{
restrictions[2] = s;
}
DataTable schemaTable = con.GetSchema("Tables", restrictions);
foreach (DataRow row in schemaTable.Rows)
{
result.Add(row[2].ToString());
}
Это потому, что вызов GetSchema
принадлежит внутри итерации первого цикла for
следующим образом:
foreach (string s in GetMetaData())
{
restrictions[2] = s;
DataTable schemaTable = con.GetSchema("Tables", restrictions);
foreach (DataRow row in schemaTable.Rows)
{
result.Add(row[2].ToString());
}
}
Следующая проблема, с которой вы столкнулись, заключается в том, что result
действительно должен быть словарем:
var result = new Dictionary<string, List<string>>();
, потому что вы восстанавливаете информацию столбца для нескольких таблиц.Это изменит эту итерацию на что-то вроде этого:
foreach (string s in GetMetaData())
{
restrictions[2] = s;
DataTable schemaTable = con.GetSchema("Tables", restrictions);
result.Add(s, new List<string>());
foreach (DataRow row in schemaTable.Rows)
{
result[s].Add(row[2].ToString());
}
}