I was ask to create COM+ that will return data from DB2 to Classic ASP that has multi-language support.
At first, it was really a headache on how I can accomplish this project. I’ve try to just passed the data comming from DB2 directly to ASP but it was totally garbage.
Well the solution is seems simple, I connect to DB2 server passed the query and then convert the result to Ascii Codes, I set a delimiter for every row, every item, and every letters from COM+ and pass it to ASP then convert again to characters by using spit() , Chr & ChrW function to convert to character since the charset and code page is already declared.
C# Code for converting to ASCII – delimited by & per character:
public static string Chr(string str) { if (str.Length > 0) { StringBuilder retStr = new StringBuilder(); char[] arrychr = str.ToCharArray(); foreach (char chr in arrychr) { int asciicode = (int)chr; retStr.Append("&" + asciicode.ToString()); } return retStr.ToString(); } return ""; }
Function in ASP to convert from ASCII to Characters:
Function ConvertToChar(byval str) 'delimiters dim delrows, delitems, delcols delrows = "___NLINE__" delcols = "N$XITM_" delitems = "&" '******************************** 'return string dim strConverted 'arrays dim arryRows, arryCols, arryItems 'counters dim ctrrows, ctrcol, ctritems 'Ubound Var dim UarryRows,UarryCols,UarryItems strConverted = "" dim ichr 'Get the Rows arryRows = split(str,delrows) UarryRows = Cint(Ubound(arryRows)) for ctrrows = 0 to UarryRows 'Get Columns arryCols = split(arryRows(ctrrows),delcols) UarryCols = Cint(ubound(arryCols)) for ctrCol = 0 to UarryCols 'Get Items arryItems = split(arryCols(ctrCol),delitems) UarryItems = Cint(UBound(arryItems)) for ctrItems = 0 to UarryItems 'checks if Item is ASCII Code if len(arryItems(ctrItems)) > 1 then ichr = cLng(arryItems(ctrItems)) select case ichr case 219,254,221: 'this characters are whitespace case else: if ichr > 254 then strConverted = strConverted & Chrw(ichr) else strConverted = strConverted & Chr(ichr) end if end select else strConverted = strConverted & arryItems(ctrItems) end if next 'Adds NextItem Attrib if (ctrCol UarryCols) then strConverted = strConverted & delcols next 'Adds NextLine Attrib if (ctrrows UarryRows) then strConverted = strConverted & delrows next ConvertToChar = strConverted End Function
I get data from DB2 using Dataset and I loop each rows in the dataset to construct a string, since string datatype is compatible with Classic ASP, My delimiter per row is “___NLINE__” and per column is
“N$XITM_”. Also in order to connect to DB2, I used Ritmo Driver for iSeries, its a third-party driver that supports .NET.