Я пытаюсь выполнить массовую загрузку данных из файла .DAT (вывод из SQL Server) в файл SQL CE 4.0. Я использовал класс ErikEJ SqlCeBulkCopy для идеальной загрузки данных с SQL Server, но проблема с .DAT была проблемой.
Я создал класс, реализующий IDataReader для чтения из .DAT, поэтому я могу передать читателя в метод SqlCeBulkCopy.WriteToServer. Читатель в основном в порядке, но у меня проблемы с нулями; исключение выдается, когда значение NULL было прочитано из файла .DAT и вставлено в столбец, допускающий значение NULL, в целевой таблице.
Мне хочется поверить, что я каким-то образом неправильно реализовал интерфейс IDataReader. У меня значения хранятся в массиве System.Object, а метод IsDBNull реализован следующим образом:
public bool IsDBNull(int i)
{
return Values[i] == null;
}
Стоит отметить, что я поставил здесь точку останова, а метод не вызывается.
В противном случае мои соответствующие методы:
public object GetValue(int i)
{
return Values[i] ?? DBNull.Value;
}
object IDataRecord.this[int i]
{
get { return GetValue(i); }
}
object IDataRecord.this[string name]
{
get
{
return GetValue(GetOrdinal(name));
}
}
Исключение, которое я получаю, - это FormatException с сообщением «Входная строка имеет неправильный формат». Кто-нибудь знает, где я ошибаюсь?
Это трассировка стека из исключения:
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
в System.Number.ParseInt32 (String s, стиль NumberStyles, информация NumberFormatInfo) в System.Byte.Parse (String s, стиль NumberStyles, информация NumberFormatInfo) в System.Convert.ToByte (значение String, поставщик IFormatProvider) в System.Data. SqlServerCe.SqlCeUpdatableRecord.SetClrTypeValue (Int32 порядкового, значение объекта, метод String) в System.Data.SqlServerCe.SqlCeUpdatableRecord.SetValue (Int32 порядковых, значение объекта) при ErikEJ.SqlCe.SqlCeBulkCopy.WriteToServer (ISqlCeBulkCopyInsertAdapter адаптер) в ErikEJ.SqlCe.SqlCeBulkCopy .WriteToServer (считыватель IDataReader) в MySoftware.Modules.Analysis.SqlCeFileConfiguration.SqlCeBulkDataStreamer.CopyFromReader (считыватель IDataReader, String destinationConnectionString, String tableName) в E: \ Code \ Desktop MySoftware \ Software \ Desktop \ MySoftwareSoftware \ Software \ Desktop \ MySoftware \ Software .cs: строка 42 в MySoftware.Modules.Analysis.Services.SqlCeDataManagerService.InsertData (String connectionSt ring, String tempWorkFolder, TableInfo tableInfo) в E: \ Code \ Desktop MySoftware \ software \ desktop_and_web \ MySoftware \ MySoftware.Analysis \ Services \ SqlCeDataManagerService.cs: строка 742