c # /. NET SQLite - REINDEX не работает? - PullRequest
2 голосов
/ 11 марта 2010

Я пытаюсь переиндексировать таблицу в простой базе данных, которую я создал с помощью SQLite.NET и VS2008. Мне нужно переиндексировать таблицы после каждой команды DELETE, и вот фрагмент кода, который я написал (он не работает):

SQLiteCommand currentCommand;
String tempString = "REINDEX tf_questions";
//String tempString = "REINDEX [main].tf_questions";
//String tempString = "REINDEX main.tf_questions";

currentCommand = new SQLiteCommand(myConnection);
currentCommand.CommandText = tempString;
currentCommand.ExecuteNonQuery()

При запуске в моей программе код не выдает ошибок, но также не переиндексирует таблицу "tf_questions". В приведенном выше примере вы также увидите другие строки запроса, которые я пробовал, которые также не работают.

Пожалуйста, помогите,

Спасибо

Ответы [ 2 ]

1 голос
/ 12 марта 2010

Я нашел обходной путь для моей проблемы. Рассмотрим следующий код:

SQLiteCommand currentCommand;
String tempString;
String currentTableName = "tf_questions";
DataTable currentDataTable;
SQLiteDataAdapter myDataAdapter;

currentDataTable = new DataTable();
myDataAdapter = new SQLiteDataAdapter("SELECT * FROM " + currentTableName, myConnection);
myDataAdapter.Fill(currentDataTable);


//"tf_questions" is the name of the table
//"question_id" is the name of the primary key column in "tf_questions" (set to auto inc.)
//"myConnection" is and already open SQLiteConnection pointing to the db file

for (int i = currentDataTable.Rows.Count-1; i >=0 ; i--)
{
    currentCommand = new SQLiteCommand(myConnection);
    tempString = "UPDATE "+ currentTableName +"\nSET question_id=\'"+(i+1)+"\'\nWHERE (question_id=\'" +
        currentDataTable.Rows[i][currentDataTable.Columns.IndexOf("question_id")]+"\')";
    currentCommand.CommandText = tempString;

    if( currentCommand.ExecuteNonQuery() < 1 )
    {
        throw new Exception("There was an error executing the REINDEX protion of the code...");
    }
}

Этот код работает, хотя я бы хотел использовать встроенную команду SQL REINDEX.

0 голосов
/ 15 апреля 2010

Если вы делаете это ради производительности, подумайте: ответ :

REINDEX не помогает. REINDEX только необходимо, если вы измените сортировку последовательность.

После множества ВСТАВЛЕНИЙ и УДАЛЕНИЙ, иногда ты можешь стать немного лучше производительность, делая ВАКУУМ. ВАКУУМНАЯ улучшает местность ссылки немного.

...