2008. 10. 22. 21:23

다른 서버의 DB연결 정보를 모르는 상태에서도 DB를 쿼리해 올수 있는 방법입니다.
물론 해당 DB가 접근 가능한 서버에 DB쿼리를 담당하는 소스가 있어야 하구요.

원리는 아래와 같습니다.
DB를 접근할 수 없는 서버측 (서버A) 에서 xmlhttp로 DB가 접근가능한 서버(서버B) 에 있는 Dbconn.asp를 쿼리문을 주면서 호출하면 Dbconn.asp는 해당 DB에 있는 데이터를 쿼리한다음 XML로 변환하여 Response로 부립니다.

서버 A에서 xmlHttp로 연결하였기때문에 response에서 생성된 데이터를 String형태로 가져 올수 있습니다.
가져운 String를 ADODB.Stream객체로 변환후 다시 Recordset로 변환...^^

DTest.asp  -해당 DB가 접근하지 않는 서버에서 실행

<%
"" Response.Charset="euc-kr"

Dim QryStr
"" QryStr = " select idx, Iname, Iorder"
"" QryStr = QryStr & "   from Tcategory "
"''" QryStr = QryStr & "  where mco = '000' "
"" QryStr = QryStr & "  order by art_order "

Dim Http, sXML
"" Set Http = server.CreateObject("Microsoft.XMLHTTP")
""" Http.Open "GET", "http://localhost/Dbconn.asp?QryStr"=" & QryStr, False
Http.Send

sXML = Replace(Http.responseText, vbNewLine, vbNullString)

Set Http = Nothing

   Dim oStream
""    Set oStream = Server.CreateObject("ADODB.Stream")
   oStream.Open
'    oStream.WriteText sXML   'Give the XML string to the ADO Stream

'    oStream.Position = 0    'Set the stream position to the start

   Dim oRecordset
""    Set oRecordset = Server.CreateObject("ADODB.RecordSet")
  
'    oRecordset.Open oStream    'Open a recordset from the stream

   oStream.Close
   Set oStream = Nothing

response.Write oRecordSet.recordcount

Set oRecordset = Nothing

%>



Dbconn.asp - 해당 DB 가 접근 가능한 서버측에 심어두어야 함.

<%
Option Explicit

""Response.ContentType = "text/xml"

Dim ObjADORS, QryStr,DB_DSN
Const adPersistXML = 1
""QryStr = Request("QryStr")
""DB_DSN = "Provider=sqloleDB;Data Source=MyDBSvrIP;Initial Catalog=MyDBName;User ID=myUser;Password=myPwd;"

""Set ObjADORS = Server.CreateObject("ADODB.Recordset")

ObjADORS.Open QryStr, DB_DSN

ObjADORS.Save Response, adPersistXML

ObjADORS.Close
Set ObjADORS = Nothing

%>



Posted by ToTb