У меня есть головоломка, которую я пытаюсь выяснить.Моя веб-страница отправляет запрос в локальную базу данных SQL и возвращает 2 строки.Проблема в том, что когда я копирую и вставляю тот же самый запрос непосредственно в SQL Enterprise Manager, он (правильно) возвращает 3 строки!У меня вопрос - как веб-версия запроса может вернуть только 2 строки.Немного предыстории - читаемая таблица содержит поля varchar с английскими словами и поле nvarchar, которое содержит китайский эквивалент.Код, который я использую для выполнения запроса, является общим кодом из библиотеки, которую я использовал годами, поэтому я не думаю, что это обязательно код, используемый для выполнения запроса.
Вот код с моей веб-страницыкоторый загружает записи.Прямо в точке, где набор записей изначально загружен, я проверяю количество строк из набора записей, и оно возвращает значение 1 (которое начинается с нуля, поэтому в наборе записей 2).
=================================================================
public function LoadByQuery(ByVal sQueryType, ByVal sQueryValue, ByVal sSortOrder, ByVal sDatabase)
if IsOnErrorResumeNextActive() then on error resume next
LoadByQuery=false
mytrace("LoadByQuery")
' free any existing elements
Cleanup()
'dbconnfix
'dim sSQL,rsSQL
dim SQLConn,sSQL,rsSQL,sDSN
dim arrData,nMarketingColCount,nMarketingRowCount,x,bRet
nMarketingColCount=-1
nMarketingRowCount=-1
select case sQueryType
case MARKETINGMGR_PARMTYPE_BYCLAUSE _
sSQL = "SELECT id,guid,store,customerid,employeeid,filetype," & _
"creationdate,filename,filesite,filesize,friendlyname,md5hash,folder,description,descriptionchinese,brand,brandchinese,productid,views,siteuploaded,approved,tags,tagschinese " & _
"FROM " & MARKETING_TABLE_NAME & " "
if sQueryValue<>"" then sSQL = sSQL & " WHERE " & sQueryValue
if sSortOrder<>"" then sSQL = sSQL & " ORDER BY " & sSortOrder
case MARKETINGMGR_PARMTYPE_BYQUERY sSQL = sQueryValue
case else _
sLastErrorMsg="Error: invalid sQueryType passed to LoadByQuery: " & sQueryType
mytrace(sLastErrorMsg)
exit function
end select
err.clear
'dbconnfix
' Create the ADO objects
Set SQLConn = Server.CreateObject("ADODB.Connection")
' fetch the connection string to the SQL database
select case lcase(sDatabase)
case POWERMAX_DATABASE
sDSN=GetPowerMaxDSNString()
case else
response.write("ERROR: Database not specied in CMarketingMgr::LoadByQuery")
response.end
end select
' Open the SQL database
SQLConn.Open sDSN
if Err.Number <> 0 then
sLastErrorMsg = "Error opening SQL Connection using DSN " ' & sDSN & " Err.Number = " & CStrIfNull(Err.Number) & " Err.Description = " & Err.Description
mytrace(sLastErrorMsg)
set SQLConn=nothing
exit function
end if
Set rsSQL = Server.CreateObject("ADODB.Recordset")
mytrace(sSQL)
rsSQL.Open sSQL,SQLConn
' able to open the recordset?
if err.number<>0 then
sLastErrorMsg="Error: Unable to open recordset " & err.brand
mytrace(sLastErrorMsg)
exit function
else
if rsSQL.EOF=false then
' items found: GetRows, and get row and column counts
arrData = rsSQL.GetRows()
nMarketingColCount=ubound(arrData,1)
nMarketingRowCount=ubound(arrData,2)
end if ' if rsSQL.EOF
end if ' if err.number<>0
rsSQL.close
set rsSQL=nothing
'dbconnfix
SQLConn.close
set SQLConn=nothing
dim y
' customerid,employeeid, emailaddress, password
' Create new items from db
dim s_id ' id of the db record
dim s_guid
dim s_store
dim s_customerid ' Marketing customerid
dim s_employeeid
dim s_filetype
dim s_creationdate
dim s_filename
dim s_filesite
dim s_filesize
dim s_friendlyname
dim s_md5hash
dim s_folder
dim s_description
dim s_descriptionchinese
dim s_brand
dim s_brandchinese
dim s_productid
dim s_views
dim s_siteuploaded
dim s_approved
dim s_tags
dim s_tagschinese
dim arr,sDate,sTime
mytrace("nMarketingRowCount=" & nMarketingRowCount)
' Create new items and add to our array
if nMarketingRowCount <>-1 then
' for each record, add to our internal table
for x = 0 to nMarketingRowCount
' add to internal table
y=0
' globals
s_id = CStrZeroIfNull(arrData(y,x)) : y=y+1
s_guid = CStrIfNull(arrData(y,x)) : y=y+1
s_store = CStrIfNull(arrData(y,x)) : y=y+1
s_customerid = CStrZeroIfNull(arrData(y,x)) : y=y+1
s_employeeid = CStrZeroIfNull(arrData(y,x)) : y=y+1
s_filetype = CStrIfNull(arrData(y,x)) : y=y+1
s_creationdate = CStrIfNull(arrData(y,x)) : y = y + 1
s_filename = CStrIfNull(arrData(y,x)) : y = y + 1
s_filesite = CStrIfNull(arrData(y,x)) : y = y + 1
s_filesize = CStrZeroIfNull(arrData(y,x)) : y = y + 1
s_friendlyname = CStrIfNull(arrData(y,x)) : y = y + 1
s_md5hash = CStrIfNull(arrData(y,x)) : y = y + 1
s_folder = CStrIfNull(arrData(y,x)) : y = y + 1
s_description = CStrIfNull(arrData(y,x)) : y = y + 1
s_descriptionchinese = CStrIfNull(arrData(y,x)) : y = y + 1
s_brand = CStrIfNull(arrData(y,x)) : y = y + 1
s_brandchinese = CStrIfNull(arrData(y,x)) : y = y + 1
s_productid = CStrZeroIfNull(arrData(y,x)) : y = y + 1
s_views = CStrZeroIfNull(arrData(y,x)) : y = y + 1
s_siteuploaded = CStrIfNull(arrData(y,x)) : y = y + 1
s_approved = SetDefaultBitValue(arrData(y,x)) : y = y + 1
s_tags = CStrIfNull(arrData(y,x)) : y = y + 1
s_tagschinese = CStrIfNull(arrData(y,x)) : y = y + 1
'-----------------------------------------------
mytrace("s_creationdate: " & s_creationdate)
arr = split(s_creationdate," ")
sDate = arr(0)
sTime="00:00:00" : if ubound(arr)>0 then sTime = arr(1)
if isnumeric(Right(sDate,4)) then sDate = ConvertMMDDYYYYToYYYYMMDD(sDate)
s_creationdate = sDate & " " & sTime
mytrace("s_creationdate: " & s_creationdate)
' add the item to the array
mytrace("AddToMarketingArray: id=" & s_id)
if AddToMarketingArray(s_id,s_guid,s_store,s_customerid,s_employeeid,s_filetype,_
s_creationdate,s_filename,s_filesite,s_filesize,s_friendlyname,s_md5hash,s_folder,s_description,s_descriptionchinese,s_brand,s_brandchinese,s_productid,_
s_views,s_siteuploaded,s_approved,s_tags,s_tagschinese)=false then
exit function
end if
next
end if ' if nMarketingRowCount <>-1
LoadByQuery=true
end function
================================================================= Вот фактический запрос, который я скопировал и вставил с дисплеязапроса на веб-странице непосредственно в SQL Enterprise Manager:
SELECT id,guid,store,customerid,employeeid,filetype,creationdate,filename,filesite,filesize,friendlyname,md5hash,folder,description,descriptionchinese,brand,brandchinese,productid,views,siteuploaded,approved,tags,tagschinese FROM MarketingCenter WHERE approved=1 AND filetype=N'C' AND (brand='Aveeno' OR brandchinese=N'艾维诺') ORDER BY filetype
Набор записей веб-сайта содержал только 2 строки, но запрос Enterprise Manager возвратил 3 строки.Версия запроса на веб-сайте не включала запись, в которой для brandchinese было установлено значение N '艾维诺', тогда как для запроса Enterprise Manager это было сделано.
Я думал, что это может иметь какое-то отношение к информации в заголовке страницы, но страница отображает китайские иероглифы просто отлично.Вот заголовок на моей странице:
<%@LANGUAGE="VBSCRIPT" CodePage = 65001%>
<%
Option Explicit
Session.CodePage = 65001
Response.charset ="utf-8"
Session.LCID = 1033 'en-US
%>
Есть какие-нибудь мысли о том, почему запись с китайскими символами в ней не будет возвращена в наборе записей, вызванном моей веб-страницей, даже если Enterprise Manager возвращает запись из того же запроса?