почему я не могу более двух значений из 3 разных таблиц в одном запросе - PullRequest
0 голосов
/ 23 марта 2010

Это странно. На странице сведений о новостях я хочу взять несколько разных значений из разных таблиц одним запросом. Однако по какой-то странной причине я получаю только два значения. Таким образом, результат выглядит так:

<Desc></Desc>
<Date/>
</row>
</rows>

Если я отключу полное имя, я получу шортдеск, но не другие. То же самое происходит с другими.

NewsID = Request.QueryString("NEWSID")  

SQL = "SELECT N.NewsID, N.MembersID, N.CategoriesID, N.ImagesID, N.NewsTitle, N.NewsShortDesc, N.NewsDesc, N.NewsActive, N.NewsDateEntered, C.CategoriesID, C.CategoriesName, M.MembersID, M.MembersFullName"

Set objViewNews = objConn.Execute(SQL)  

With Response
    .Write "<?xml version='1.0' encoding='windows-1254' ?>"
    .Write "<rows>"
End With

With Response
    .Write "<row id='"& objViewNews("NewsID") &"'>"
    .Write "<FullName>"& objViewNews("MembersFullName") &"</FullName>"
    .Write "<CategoryName>"& objViewNews("CategoriesName") &"</CategoryName>"
    .Write "</row>"
End With

With Response
    .Write "</rows>"
End With    

objViewNews.Close
Set objViewNews = Nothing

1 Ответ

0 голосов
/ 23 марта 2010
  1. Я предполагаю, что вы ожидаете одну строку или вам нужна только первая строка?
  2. Является ли MembersFullName nullable?Является ли NewsShortDesc обнуляемым?
  3. Вы должны всегда проверять свои входные данные, а не объединять их непосредственно в строку.Поэтому вам следует использовать функцию, которая проверяет и проверяет, что NewsID относится к ожидаемому вами типу и правильно экранирован, например:
SQL = SQL & " Where N.NewsId = " & SqlString("int", newsId)

4.Вы можете использовать синтаксис JOIN следующим образом:

(Предполагая функцию проверки ввода)

    SQL = "SELECT N.NewsID, N.MembersID, N.CategoriesID, N.ImagesID, N.NewsTitle, N.NewsShortDesc, N.NewsDesc, N.NewsActive, N.NewsDateEntered, C.CategoriesID, C.CategoriesName, M.MembersID, M.MembersFullName"
    SQL = SQL & " FROM News N"
    SQL = SQL & "   Inner Join Categories C"
    SQL = SQL & "       On C.CategoriesID = N.CategoriesID"
    SQL = SQL & "   Inner Join Members M"
    SQL = SQL & "       On M.MembersID = N.MembersID"
    SQL = SQL & " Where N.NewsId = " & SqlString(VariantType.Integer
, NewsId)
    SQL = SQL & "   And N.NewsActive = 1"

(форматирование может быть странным)

РЕДАКТИРОВАНИЕ Вы должны попробовать обернуть все значения в CDATAвот так:

With Response
    .Write "<row id='"& objViewNews("NewsID") &"'>"
    .Write "<FullName><![CDATA["& objViewNews("MembersFullName") &"]]></FullName>"
    .Write "<CategoryName><![CDATA["& objViewNews("CategoriesName") &"]]></CategoryName>"
    .Write "<Title><![CDATA["& objViewNews("NewsTitle") &"]]></Title>"
    .Write "<ShortDesc><![CDATA["& objViewNews("NewsShortDesc") &"]]></ShortDesc>"
    .Write "<Desc><![CDATA["& objViewNews("NewsDesc") &"]]></Desc>"
    .Write "<Date>"& objViewNews("NewsDateEntered") &"</Date>"
    .Write "</row>"
End With

Я не обернул значение даты в CDATA, хотя вы могли бы также подумать об этом просто для уверенности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...