По всем обычным причинам - в первую очередь избегая преобразования данных в базу данных и предотвращая атаки SQL-инъекций - я бы посоветовал вам выполнить синтаксический анализ числа в C #, а затем использовать параметризованный запрос поговорить с SQLite.
В этом случае это значительно упростит отладку - либо .NET не удастся проанализировать также и строку (в этом случае это может быть проблемой с вашими данными), либо это сработает, и вы выиграли не нужно беспокоиться о том, какие преобразования выполняла база данных.
РЕДАКТИРОВАТЬ: Я только что видел ваш комментарий о том, что Convert.ToInt32
также не удается. Это довольно четкое указание на то, что именно данные вызывают проблемы.
Я ожидаю, что ваш код будет выглядеть примерно так:
string widthText = GetMetadata(filename, 162);
string heightText = GetMetadata(filename, 164);
widthText = width.Substring(0, width.IndexOf(' ')).Trim();
heightText = height.Substring(0, height.IndexOf(' ')).Trim();
int width = int.Parse(widthText, CulutureInfo.InvariantCulture);
int height = int.Parse(widthText, CulutureInfo.InvariantCulture);
using (SQLiteCommand cmd = Database.CreateCommand())
{
cmd.CommandText = "INSERT INTO image VALUES (?, ?, ?)";
cmd.Parameters.Add(fileid);
cmd.Parameters.Add(width);
cmd.Parameters.Add(height);
cmd.ExecuteNonQuery();
}
Обратите внимание, что вызов Trim
удалит все начальные пробелы, которые, по-видимому, были причиной проблемы.