Witam,
jak sprawdzić czy dana kolumna jest przyrostowa? Wyciągnąłem już wszystkie dane po przez OleDbSchemaGuid tj. nazwy kolumn, klucze, indeksy, typy danych, unikalność itp ale nie mogę doszukać się autoinkrementacji. Źródłowa baza to Accessowe accdb, a docelowa będzie SQLite. Tworzę prosty konwerter, bo żaden z sieci nie działa dobrze albo są płatne. Może jakieś zapytanie bezpośrednio do bazy istnieje? Information_Schema oczywiście nie działa. Nie sprawdzi się też np. porównanie ze sobą wartości ID jakiejś grupy rekordów, bo są tabele gdzie wartość rośnie stale o 1 z każdym nowym rekordem a nie ma włączonej autoinkrementacji. Baza Access to kilkaset tabel i milony rekordów. Ręcznie nie chce mi się wprowadzać wszystkiego. Klucze Podstawowe nie zawsze są autiinkrementowane więc takie kombinowanie z góry odpada.
Tak wyciągam np klucz podstawowy. Sprawdzam każdą kolumnę czy jest kluczem podstawowym. Podobnie bym chciał się dowiedzieć czy jest autoincrementowany
private bool IsPrimaryKey(string nazwaTabeli, string nazwaKolumny)
{
try
{
connection.Open();
List<string> listOfPrimaryKeys = new List<string>();
DataTable schema = (connection as OleDbConnection).GetOleDbSchemaTable(OleDbSchemaGuid.Primary_Keys, new Object[] { null, null, nazwaTabeli });
connection.Close();
int columnOrdinalForName = schema.Columns["COLUMN_NAME"].Ordinal;
foreach (DataRow row in schema.Rows)
{
listOfPrimaryKeys.Add(row.ItemArray[columnOrdinalForName].ToString());
}
for (int i = 0; i < listOfPrimaryKeys.Count; i++)
{
if (listOfPrimaryKeys[i] == nazwaKolumny)
return true;
}
}
catch (Exception ex)
{
Console.WriteLine("*******Error******* Komunikat z funkcji IsPrimaryKey - > " + ex.Message + " w: " + nazwaTabeli + "[" + nazwaKolumny + "]");
}
return false;
}
Pozdrawiam
Przemysław Mazurek