Странная проблема с полями nvarchar (max) и классическим ASP - PullRequest
1 голос
/ 24 июня 2010

Я работаю на сайте Classic ASP (VBScript), который работает на Windows 2008 сервере с IIS7 и работает на базе SQL Server 2008 Я вижу странное поведение, характерное для полей типа nvarchar (max) .

У меня есть этот простой фрагмент кода, который перебирает некоторые результаты запроса и пытается дважды напечатать поле заголовка

rs.open "SELECT * FROM thing", dbConnection

do while not rs.eof
    response.write "(" & rs("title") & ")" & "(" & rs("title") & ")" & "<br />"
    rs.movenext
loop

При первом использовании rs("title") я получаю значение обратно. В любое время после первого раза в этом цикле rs("title") возвращает пустое значение.

Опять же, похоже, это происходит только с полями nvarchar (max) .

Может ли кто-нибудь пролить свет на это поведение и как его обойти?

Ответы [ 6 ]

3 голосов
/ 24 июня 2010

кроме «вытащить его в переменную перед отображением» ... Я смутно помню, как коллегам нужно было взломать запросы asp / sql / varchar (max), что-то вроде последнего столбца (или не последнегостолбец) в запросе.Извините за расплывчатость, прошло несколько лет с тех пор, как мне приходилось иметь дело с осиной.

2 голосов
/ 23 января 2017

Очень старая тема - призналась. Но у меня была эта проблема, и она сводила меня с ума.

Я исправил это, изменив строку подключения следующим образом:

objConn.Open "Driver={SQL Server}; Server=(local); Database=<what-your-database-is-called>; Uid=sa;Pwd=sa;"

до:

objConn.Open "Provider=SQLNCLI; Server=(local); Database=<what-your-database-is-called> ; Uid=sa;Pwd=sa;"

Итак, по сути, удаление Driver = {SQL Server} и добавив в "Provider = SQLNCLI;", ИСПРАВЛЕНО.

Теперь я вижу правильно отображаемый столбец nvarchar (max) на моей странице Classic ASP.

Надеюсь, это кому-нибудь поможет.

2 голосов
/ 24 июня 2010

Если вы посмотрите на эту ссылку, то http://msdn2.microsoft.com/en-us/library/ms130978.aspx говорит о том, чтобы позволить SQL Server Native Client получить новейшие функции, такие как varchar (max), который был представлен в SQL2005, так что я думаю, возможно, с помощью этой будет работать и для вас, даже если вы используете SQL 2008.

1 голос
/ 14 июля 2010

У меня просто была похожая проблема (только с SQL Server 2005, а не 2008):

If Not IsNull(rs("Title")) Then
    Response.Write "The title: " & rs("Title") 
End If

Response.Write был выполнен, но сам заголовок не отображался.

У меня ушло довольно много времени, пока я не понял, что проблема заключается в комбинации ASP Classic и nvarchar (max).
Затем я нашел this и сделал то, что было описанотам ... я изменил свой код на это:

SomeVariable = rs("Title")    
If Not IsNull(SomeVariable) Then
    Response.Write "The title: " & SomeVariable 
End If
1 голос
/ 24 июня 2010

Не уверен, что это является причиной, но стоит отметить, что тип varchar(max) не был добавлен на Sql Server до того, как была выпущена последняя версия Classic ASP. Так что вполне возможно, что старый провайдер ado просто не знает, как обращаться с этими полями.

0 голосов
/ 28 декабря 2015

Я сделал приведение (columName к varchar), и это сработало для меня.

...