|
|
|
LoadXMLFromFile
|
|||
|---|---|---|---|
|
#18+
Воспользовался примером процедуры для курса валют ЦБРФ: CREATE PROCEDURE LoadXMLFromFile ( @tcFileName VARCHAR(255), @tcXMLString VARCHAR(8000) OUTPUT ) AS BEGIN -- Scratch variables used in the script DECLARE @retVal INT DECLARE @oXML INT DECLARE @errorSource VARCHAR(8000) DECLARE @errorDescription VARCHAR(8000) DECLARE @loadRetVal INT -- Initialize the XML document EXEC @retVal = sp_OACreate 'MSXML2.DOMDocument', @oXML OUTPUT IF (@retVal <> 0) BEGIN -- Trap errors if any EXEC sp_OAGetErrorInfo @oXML, @errorSource OUTPUT, @errorDescription OUTPUT RAISERROR (@errorDescription, 16, 1) -- Release the reference to the COM object EXEC sp_OADestroy @oXML RETURN END EXEC @retVal = sp_OASetProperty @oXML, 'async', 0 IF @retVal <> 0 BEGIN -- Trap errors if any EXEC sp_OAGetErrorInfo @oXML, @errorSource OUTPUT, @errorDescription OUTPUT RAISERROR (@errorDescription, 16, 1) -- Release the reference to the COM object EXEC sp_OADestroy @oXML RETURN END -- Load the XML into the document EXEC @retVal = sp_OAMethod @oXML, 'load', @loadRetVal OUTPUT, @tcFileName IF (@retVal <> 0) BEGIN -- Trap errors if any EXEC sp_OAGetErrorInfo @oXML, @errorSource OUTPUT, @errorDescription OUTPUT RAISERROR (@errorDescription, 16, 1) -- Release the reference to the COM object EXEC sp_OADestroy @oXML RETURN END -- Get the loaded XML EXEC @retVal = sp_OAMethod @oXML, 'xml', @tcXMLString OUTPUT IF (@retVal <> 0) BEGIN -- Trap errors if any EXEC sp_OAGetErrorInfo @oXML, @errorSource OUTPUT, @errorDescription OUTPUT RAISERROR (@errorDescription, 16, 1) -- Release the reference to the COM object EXEC sp_OADestroy @oXML RETURN END -- Release the reference to the COM object EXEC sp_OADestroy @oXML END Только нужна обработка других XML-файлов типа <root xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <good EAN="032400633003" name="Варежки" price="19.95" /> <good EAN="032400644003" name="Варежки" price="10" /> <good EAN="032413545003" name="Перчатки" price="19.95" /> <good EAN="032400675003" name="Варежки" price="19.95" /> <good EAN="032415033003" name="Варежки" price="22.45" /> <good EAN="032415034003" name="Варежки" price="22.45" /> <good EAN="032320675003" name="Шарф" price="10" /> <good EAN="032320647003" name="Шарф" price="29.95" /> <good EAN="032435226003" name="Варежки" price="15" /> <good EAN="032435233003" name="Варежки" price="15" /> <good EAN="032435244003" name="Варежки" price="34.95" /> <good EAN="032435247003" name="Варежки" price="15" /> <good EAN="032424526003" name="Перчатки" price="34.95" /> <good EAN="032424533003" name="Перчатки" price="34.95" /> <good EAN="032424544003" name="Перчатки" price="34.95" /> <good EAN="032424545003" name="Перчатки" price="34.95" /> <good EAN="032424547003" name="Перчатки" price="15" /> <good EAN="032432033003" name="Варежки" price="29.95" /> <good EAN="032432044003" name="Варежки" price="29.95" /> <good EAN="032432047003" name="Варежки" price="29.95" /> <good EAN="032445233003" name="Варежки" price="34.95" /> <good EAN="032445244003" name="Варежки" price="34.95" /> <good EAN="032444226003" name="Перчатки" price="39.95" /> <good EAN="032444233003" name="Перчатки" price="39.95" /> <good EAN="032442433003" name="Варежки" price="29.95" /> <good EAN="032442469003" name="Варежки" price="29.95" /> <good EAN="032444244003" name="Перчатки" price="39.95" /> <good EAN="032443631003" name="Варежки" price="34.95" /> <good EAN="032443650003" name="Варежки" price="34.95" /> <good EAN="032444273003" name="Перчатки" price="39.95" /> <good EAN="032444026003" name="Варежки" price="37.45" /> <good EAN="032444033003" name="Варежки" price="37.45" /> <good EAN="032444044003" name="Варежки" price="37.45" /> <good EAN="032444049003" name="Варежки" price="37.45" /> <good EAN="032444073003" name="Варежки" price="37.45" /> <good EAN="032415044003" name="Варежки" price="22.45" /> <good EAN="032415049003" name="Варежки" price="22.45" /> <good EAN="030006501003" name="Шапка" price="29.95" /> <good EAN="030006502003" name="Шапка" price="29.95" /> <good EAN="030006503003" name="Шапка" price="29.95" /> <good EAN="030006504003" name="Шапка" price="29.95" /> <good EAN="032424573003" name="Перчатки" price="34.95" /> <good EAN="032424569003" name="Перчатки" price="34.95" /> <good EAN="032415073003" name="Варежки" price="22.45" /> <good EAN="032455279003" name="Варежки" price="37.45" /> <good EAN="032452433003" name="Варежки" price="29.95" /> <good EAN="030242426003" name="Перчатки" price="29.95" /> <good EAN="030242433003" name="Перчатки" price="29.95" /> <good EAN="032454226003" name="Перчатки" price="39.95" /> <good EAN="030242454003" name="Перчатки" price="29.95" /> <good EAN="032452434003" name="Варежки" price="29.95" /> <good EAN="030242479003" name="Перчатки" price="29.95" /> <good EAN="032454233003" name="Перчатки" price="39.95" /> <good EAN="030242490003" name="Перчатки" price="29.95" /> <good EAN="032452454003" name="Варежки" price="29.95" /> <good EAN="032454234003" name="Перчатки" price="39.95" /> <good EAN="032454279003" name="Перчатки" price="39.95" /> <good EAN="032454026003" name="Варежки" price="37.45" /> <good EAN="032452033003" name="Варежки" price="34.95" /> <good EAN="032453825003" name="Варежки" price="32.45" /> <good EAN="032454032003" name="Варежки" price="37.45" /> <good EAN="032454326003" name="Варежки" price="39.95" /> <good EAN="032454033003" name="Варежки" price="37.45" /> <good EAN="032453879003" name="Варежки" price="32.45" /> <good EAN="032454034003" name="Варежки" price="37.45" /> <good EAN="032454079003" name="Варежки" price="37.45" /> <good EAN="032452054003" name="Варежки" price="34.95" /> <good EAN="032454333003" name="Варежки" price="39.95" /> <good EAN="032452069003" name="Варежки" price="34.95" /> <good EAN="032454334003" name="Варежки" price="39.95" /> <good EAN="032452079003" name="Варежки" price="34.95" /> <good EAN="032455026003" name="Перчатки" price="39.95" /> <good EAN="032455033003" name="Перчатки" price="39.95" /> <good EAN="032455034003" name="Перчатки" price="39.95" /> <good EAN="032455226003" name="Варежки" price="37.45" /> <good EAN="032455233003" name="Варежки" price="37.45" /> <good EAN="032455234003" name="Варежки" price="37.45" /> </root> Проблема в том, что после примерно 76 записей вываливается ошибка в строке EXEC @retVal = sp_OAMethod @oXML, 'xml', @tcXMLString OUTPUT При этом общий размер документа XML чуть более 4Кб. Может кто подскажет, где искать проблему? Если перед выборкой поставить ещё какую-нибудь выборку, то число меняется от 76ти. Может это как-то связано с временем на обработку? (Ошибку не успеваю написать..) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2006, 20:29 |
|
||
|
LoadXMLFromFile
|
|||
|---|---|---|---|
|
#18+
mayday86rus ... CREATE PROCEDURE LoadXMLFromFile ( ... @tcXMLString VARCHAR(8000) OUTPUT -- Get the loaded XML ... EXEC @retVal = sp_OAMethod @oXML, 'xml', @tcXMLString OUTPUT ... При этом общий размер документа XML чуть более 4Кб. ... (Ошибку не успеваю написать..) Во-первых, вполне безболезненно можно заменить параметр процедуры @tcXMLString VARCHAR(8000) OUTPUT на @tcXMLString NTEXT OUTPUT (в любом случае 4 гига юникодовской строки лучше чем ~8K символов ASCII). Во-вторых - где гарантия, что sp_OAMethod возвращает вам в @tcXMLString OUTPUT именно VARCHAR? (поищите в BOL статью с названием "Data Type Conversions Using OLE Automation Stored Procedures"). В-третьих - ну почему все горе-"OLE-автоматизаторы" считают своим долгом вызывать sp_OAMethod там, где необходимо вызывать sp_OAGetProperty!? (а "xml" у "'MSXML2.DOMDocument" именно свойство, а не метод) BOL (найдите 10 отличий) Syntax sp_OAGetProperty objecttoken, propertyname [ , propertyvalue OUTPUT ] [ , index...] Syntax sp_OAMethod objecttoken, methodname [ , returnvalue OUTPUT ] [ , [ @parametername = ] parameter [ OUTPUT ] [ ...n ] ] Третий параметр sp_OAMethod (returnvalue OUTPUT) - это не возможное значение свойства, а флаг возврата метода (что-то типа структурки hresult), и если он в некоторых случаях совпадает с нужными вам данными, то это еще не повод строить на таких допущениях реальное продуктивное решение... Ну и, в-четвертых - покажете ошибку, будет вам и помощь более конкретная... Удачи!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2006, 10:40 |
|
||
|
LoadXMLFromFile
|
|||
|---|---|---|---|
|
#18+
Спасибо за развёрнутый комментарий. Попробовал сделать - встала проблема. Как возможно изменение переменной NTEXT, если она сама по себе является внешней переменной? Её, получается, изменять нельзя.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2006, 18:04 |
|
||
|
LoadXMLFromFile
|
|||
|---|---|---|---|
|
#18+
Т.е. авторEXEC sp_OAGetProperty @oXML, 'xml', @tcXMLString OUTPUT эта команда не может поменять значение @tcXMLString типа ntext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2006, 18:34 |
|
||
|
|

start [/forum/topic.php?fid=14&fpage=75&tid=1334812]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
23ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
| others: | 257ms |
| total: | 370ms |

| 0 / 0 |
