загрузка данных из XML в SQL
От: Yanish  
Дата: 22.12.05 11:38
Оценка:
поделитесь опытом!!!

с помощью чего и быстро, что самое главное т.к. много данных грузить надо, можно загрузить данные в БД SQL. Мои попытки увенчались провалом .... т.к. загрузка по моим расчетам примерно сутки ... а это критично...

// схема документа используемая при загрузке
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
     <xsd:element name="Customer">
       <xsd:complexType>
           <xsd:attribute name="ID" type="xsd:integer" />
       <xsd:attribute name="Cod" type="xsd:integer" />
       <xsd:attribute name="Date" type="xsd:float" />
       </xsd:complexType>
  </xsd:element>
</xsd:schema>


// сам документ важно количество записей, т.к. их много
<ROOT>
 <Customer ID="1" Cod="1" Date="38157"/>
 <Customer ID="2" Cod="2" Date="38250"/>
 ......
 <Customer ID="1000" Cod="2"/>
  ....
 <Customer ID="1000000" Cod="2" Date="38311"/>
</ROOT>


Пробовал:
Delphi: — через Ole объекты: SQLXML 3.0
  cmd := CreateOleObject('ADODB.Command');
  conn := CreateOleObject('ADODB.Connection');
  strmIn := CreateOleObject('ADODB.Stream');
  strmOut := CreateOleObject('ADODB.Stream');

  // Open a connection to the instance of SQL Server.
  conn.Provider := 'SQLOLEDB';
  conn.Open('server=(local); database=database; uid=UserName; pwd=pwd; ');
  conn.Properties('SQLXML Version') := 'SQLXML.3.0';
  cmd.ActiveConnection := conn;
  strmin.Open;
  strmin.position := 0;
  strmin.Charset := 'Windows-1251';
  strmin.Type := 2;
  strmin.LoadFromFile('Test.xml');
  cmd.Dialect := '{5d531cb2-e6ed-11d2-b252-00c04f681b71}';

  cmd.CommandStream := strmIn;

// Execute the command, open the return stream, and read the result.
  strmOut.Open;
  cmd.Properties('Output Stream') := strmOut;
  cmd.Properties('Output Encoding') := 'Windows-1251';
  strmOut.Charset := 'Windows-1251';
  strmOut.Type := 2;
  cmd.Execute(,,1024);
  strmOut.Position := 0;
  strmOut.SaveToFile(c:\error.xml', 2);
  cmd := NULL;
  strmout := NULL;
  strmin := NULL;
  conn := NULL;
end;


Delphi: — SQLXMLBulkLoad с помощью схем

var
  objBL: OleVariant;
begin              
  objBL := CreateOleObject('SQLXMLBulkLoad.SQLXMLBulkLoad.3.0');
  objBL.ConnectionString := 'provider=SQLOLEDB.1;data source=localhost;database=database;uid=UserName;pwd=pwd';
  objBL.ErrorLogFile := 'c:\error.log';
  objBL.Execute('c:\SampleSchema.xml', 'c:\Test.xml');
  objBL := NULL;
end;


О ТОМ ЧТОБЫ ЧЕРЕЗ ПАРСЕР "SAX" ИЛИ "DOM" ОТКРЫВАТЬ ФАЙЛ XML И РЕЧИ НЕ МОЖЕТ ИДТИ, Т.К. В РЕЗУЛЬТАТЕ ДЛЯ ВСТАВКИ НУЖНО ФОРМИРОВАТЬ СКРИПТЫ "INSERT INTO", А НА ЭТО ЕЩЁ БОЛЬШЕ ВРЕМЕНИ УХОДИТ.... ДО СКОНЧАНИЯ ВЕКА МОЖНО ЖДАТЬ !!!

В общем кто сталкивался с проблемой оптимизации работы связки SQL и XML отзовитесь ...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.