duyurunun teknik sakinleri,

şöyle bir durum var,

sql server da bir prosedür oluşturup bunu web servise yönlendireceğiz,(bu web servis canlı bir ortamdan besleniyor) bunun sonucunda xml dönecek ve o xml i parse edip DB deki tablolara aktaracağız.

daha önce browser da hava durumu servislerinden xml çektim ama bu durum biraz karışık. daha önce yapan eden var mıdır?

şöyle iki örnek buldum ama yapamadım;
www.vishalseth.com

forums.asp.net

 

Prosedür içinde xml okuma için kodları kullanırsın. Sonrasında içeriye yazarsın. Bunun için direk xml e ulaşabiliyor olmak Lazım.
Akşam kod olarak belli bir dizinden çekip içeri alan kodu gönderebilirim. Xml olarak gelen Çağrı kayıtlarını alıyorum ben bu şekilde.

rhan

hava durumunu aşağıdaki kodla okuyabiliyorum;

Declare @Object as Int;
DECLARE @handle INT
DECLARE @PrepareXmlStatus INT
Declare @ResponseText as Varchar(8000);
Declare @ResponseText_XML as XML;
Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT;
Exec sp_OAMethod @Object, 'open', NULL, 'post','api.openweathermap.org 'false'
Exec sp_OAMethod @Object, 'send'
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT
set @ResponseText_XML = REPLACE(REPLACE(REPLACE(@ResponseText,
'<?xml version="1.0" encoding="utf-8"?>',''),'&gt;','>'),'&lt;','<')



EXEC @PrepareXmlStatus= sp_xml_preparedocument @handle OUTPUT, @ResponseText_XML
SELECT @ResponseText


SELECT CONVERT(VARCHAR(10),GETDATE(),120) AS TARIH,
ID,
SEHIR,
ROUND((SICAKLIK_KELVIN-273.15),0) AS SICAKLIK_CELCIUS,
RUZGAR_YONU,
CONCAT(RUZGAR_HIZI,'m/s') AS RUZGAR_HIZI,
RUZGAR_TIPI,
HAVA_TIPI,
CONCAT(NEM_ORANI,'%') AS NEMLILIK --INTO WEATHER_CONDITION
FROM(
SELECT *
FROM OPENXML(@handle, '/current/city',1)
WITH (
ID VARCHAR(10) '../city/@id',
SEHIR VARCHAR(10) '../city/@name',
SICAKLIK_KELVIN FLOAT '../temperature/@value',
RUZGAR_YONU VARCHAR(20) '../wind/direction/@name',
RUZGAR_HIZI VARCHAR(5) '../wind/speed/@value',
RUZGAR_TIPI VARCHAR(20) '../wind/speed/@name',
HAVA_TIPI VARCHAR(20) '../weather/@value',
GUN_DOGUS VARCHAR(40) '../city/sun/@rise',
GUN_BATIS VARCHAR(40) '../city/sun/@set',
NEM_ORANI VARCHAR(10) '../humidity/@value'
)
--Exec sp_OADestroy @Object
--EXEC sp_xml_removedocument @handle
)ABC



şimdiki webserviste login olma durumu da var, bu servis 3 bileşene bakıyor, örneğin bir satışçı için randevu adetleri, sattığı ürünler ve ödemesini aldığı ürünler gibi...

bu arada chrome un Advanced Rest Client eklentisinde çalışıp xml konudunu dönüyor.

verdiğim ilk link kırıkmış onu düzelttim (www.vishalseth.com), prosedürü onun gibi oluşturdum ama alt taraftaki @requestbody değişkenine ne yazacağımı bilemedim. bişeler denedim ama invalid variable hatası alıyorum.
soapenv:Envelope xmlns:soapenv... uzantılı bir kod bulamadım.

bir de şöyle denedim, fakat bunu çalıştırınca @responseText null geliyor.

/***********************************/
Declare @Object as Int;
Declare @ResponseText as Varchar(8000);
Declare @Body as varchar(8000) =
'<Login>
<UserName>OBIWebService</UserName>
<UserPassword>OBIWebServicePassWord</UserPassword>
</Login>'

Exec sp_OACreate 'MSXML2.ServerXMLHTTP', @Object OUT;
EXEC sp_OAMethod @Object, 'open', NULL, 'post','myhostname 'false'
Exec sp_OAMethod @Object, 'setRequestHeader', null, 'Content-Type', 'text/xml'
Exec sp_OAMethod @Object, 'send', null, @body

Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT
Select @ResponseText

Exec sp_OADestroy @Object
/***********************************/

bir bucuk adana

stackoverflow.com

Exec sp_OAMethod @Object, 'send'
bu prosedüre kullanıcı adı falan göndermek lazım sanırım.

rhan

'D:\temp.xml'; adresine dosyayı indirip sonra okuyor. webservise müdahale edebiliyorsan, kullanıcı, plasiyer neyse bunları gönderip karşılığında çıkan xmli okuyabilirsin.

Tcmb için bir çalışma yaptım benim istediğimi görüyor.

-- RSS FEED
DECLARE @docHandle INT;
DECLARE @xmlData XML;
DECLARE @URL NVARCHAR(255);
DECLARE @file NVARCHAR(255);
DECLARE @cmd NVARCHAR(255);
DECLARE @sql NVARCHAR(255);
DECLARE @tXML TABLE(data XML);

SET @URL = '‪www.tcmb.gov.tr
SET @URL = REPLACE(@URL, '?','')
SET @file = 'D:\temp.xml';

-- Downloading the data
SET @cmd = 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell (new-object System.Net.WebClient).DownloadFile( ''' + @URL + ''',''' + @file + ''' )'
EXEC master.dbo.xp_cmdshell @cmd, no_output

-- Loading the Downloaded File into the XML variable
SET @sql = 'SELECT BulkColumn FROM OPENROWSET( BULK ''' + @file + ''', SINGLE_BLOB ) AS a'
INSERT @tXML EXEC(@sql);
SELECT @xmlData = data from @tXML

-- Preparing the Relational Table from the XML variable
EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlData;

--INSERT INTO NETSIS..DOVIZ
--(TARIH, SIRA, DOV_ALIS, DOV_SATIS, EFF_ALIS, EFF_SATIS)
SELECT *
--CONVERT(nvarchar, cast(Tarihi as datetime),102) as Tarih, NK.SIRA
--, TCMB.Alis, TCMB.Satis
--, TCMB.EfAlis, TCMB.EfSatis
FROM OPENXML(@docHandle, N'//Tarih_Date/Currency')
WITH (
Tarihi VARCHAR(100) '../@Date'
,CurrencyCode VARCHAR(10) '@CurrencyCode'
,CrossOrder VARCHAR(10) '@CrossOrder'
,Unit VARCHAR(100) 'Unit'
,Isim VARCHAR(100) 'Isim'
,Alis VARCHAR(100) 'ForexBuying'
,Satis VARCHAR(100) 'ForexSelling'
,EfAlis VARCHAR(100) 'BanknoteBuying'
,EfSatis VARCHAR(100) 'BanknoteSelling'
) AS TCMB
-- LEFT OUTER JOIN NETSIS..KUR NK ON
-- (CASE WHEN NK.NETSISSIRA = 1 THEN 0 ELSE NULL END) = TCMB.CrossOrder
-- OR (CASE WHEN NK.NETSISSIRA = 20 THEN 9 ELSE NULL END) = TCMB.CrossOrder
--where TCMB.CurrencyCode <> 'XDR'
--AND NK.SIRA IS NOT NULL
;

EXEC sp_xml_removedocument @docHandle;

rhan

@rhan,

durumu linkteki gibi çözdük; teşekkür ederim yardımın için.

code.msdn.microsoft.com

bir bucuk adana
1

mobil görünümden çık