Использование SQLXMLBulkLoad, исключение из-за того, что столбец не принимает значения NULL

Я пытаюсь выполнить массовую вставку XML-данных в SQL Server 2005 Express с помощью объектной модели SQLXMLBulkLoad в VB.NET с помощью Visual Studio 2010.

Когда загрузчик добирается до элемента в моем XML-файле, который не содержит значения, он выдает ошибку, потому что соответствующий столбец таблицы в SQL Server не содержит значений NULL. Это было сделано намеренно, и вместо того, чтобы вставлять NULL, мне нужно, чтобы Загрузчик вставил пустое пространство. Я не знаю, как это сделать, поскольку я впервые работаю с BulkLoad. Какие-либо предложения?

Текст файла error.xml:

  <?xml version="1.0" ?> 
    <Result State="FAILED">
     <Error>
       <HResult>0x80004005</HResult> 
       <Description> <![CDATA[ No data was provided for column 'blah' on table 'blah', and this column cannot contain NULL values.]]></Description>
       <Source>General operational error</Source> 
       <Type>FATAL</Type> 
     </Error>
   </Result>

РЕДАКТИРОВАТЬ: http://social.msdn.microsoft.com/Forums/en-US/sqlxml/thread/bfa31c49-6ae5-4a5d-bcde-cd520e0cdf70/

У этого парня была та же проблема, что и у меня, и он смог решить ее, используя objBl.Transaction = True. Однако, когда я пытаюсь это сделать, я получаю сообщение об ошибке «Не удается выполнить массовую загрузку, потому что файл« Это локальный временный файл »не может быть открыт».


person Josh McKearin    schedule 18.07.2012    source источник


Ответы (1)


Я отвечаю на это для будущих пользователей с тем же обстоятельством. Хотя это нелогично, если вы установите для своих столбцов в таблице SQL значения NULL И установите значение по умолчанию = (''), тогда пустые значения в вашем файле XML станут пустыми вместо значений NULL, и вы больше не получите эту ошибку . Я не мог использовать objBl.Transaction = True, потому что мой сервер - это другой компьютер, чем компьютер, на котором будет запускаться приложение для выполнения BulkLoad (). Это МОЖЕТ быть решено путем создания общей папки, но в моих обстоятельствах это не вариант. Поэтому следующим лучшим вариантом было сделать то же самое.

person Josh McKearin    schedule 19.07.2012