7 messaggi dal 06 settembre 2002
Mi è capitato questo problema, apparentemente inspiegabile, in diverse applicazioni, realizzate con ASP 3 e database SQL Server (nel momento in cui ho riscontrato questi problemi era aggiornato solo SP2, ora SP3).

In diverse pagine devo recupeare alcuni dati dal database (si tratta sia di elenchi dei record, sia di modifica di un record soltanto). Il codice funziona perfettamente, ma capita che qualche campo venga restituito con valore "" (cioè stringa vuota). Ho fatto alcuni controlli ed il campo restituito dalla SELECT non ha valore NULL, ma solamente "".
Ovviamente se controllo attraverso l'Enterprise Manager, il campo in questione contiene qualche valore.
La prima cosa strana è che la stessa query, stampata da ASP sulla pagina ed eseguita nel Query Analyzer restituisce correttamente tutti i valori dei campi.
La seconda cosa è che, cambiando l'ordine dei campi richiesti nella SELECT, tutti i campi restituiscono i loro valori corretti.
Esempio:
SELECT NOME, COGNOME, INDIRIZZO FROM...
--> il campo INDIRIZZO ha valore "" (stringa vuota), ma in Query Analyzer ha il suo valore.
SELECT NOME, INDIRIZZO, COGNOME FROM...
--> tutti i campi restituiscono i loro valori corretti.

Non ho trovato nessun legame tra questo problema ed il numero di campi richiesti, o la loro disposizione nella SELECT, proprio perchè mi è capitato varie volte e su applicazioni anche molto diverse tra loro, e dislocate su diversi webserver e dbserver.

Ho pensato di richiedere il vostro aiuto, perchè magari la stessa cosa è già capitata a qualcuno, e sarei molto grato a chiunque volesse anche solo darmi un consiglio per trovare un rimedio a questa situazione.

Ringrazio anticipatamente tutti coloro che mi risponderanno.
167 messaggi dal 29 dicembre 2002

Prova a dare un alias al nome del campo,

Mandami per e_mail a bb_box@tin.it il codice, oppure descrivimelo meglio , probabilnete l'errore sta nella connessione a sql, soro' felice di dargli uno sguardo ed eventualmente dare una soluzione al tuo problema.
7 messaggi dal 06 settembre 2002
Mi è capitato proprio ora, ripropongo di seguito la query.
Purtroppo però gli alias, come vedi, li avevo già utilizzati!

SELECT NC.CODICE, NC.DATA, NC.DESCRIZIONE, UTENTI.USERNAME, SETTORI.CODICE AS CODICE_SETTORE, SETTORI.NOME AS NOME_CODICE_SETTORE, FONTI.NOME AS NOME_FONTE, TIPI_NC.NOME AS NOME_TIPO_NC, CODICI_NC.CODICE AS CODICE_NC, CODICI_NC.NOME AS NOME_CODICE_NC
FROM NC, FONTI, TIPI_NC, CODICI_NC, SETTORI, UTENTI
WHERE NC.ID_FONTE = FONTI.ID_FONTE AND NC.CODICE_NC = CODICI_NC.ID_CODICE_NC AND CODICI_NC.ID_TIPO_NC = TIPI_NC.ID_TIPO_NC AND NC.ID_SETTORE = SETTORI.ID_SETTORE AND NC.ID_UTENTE = UTENTI.ID_UTENTE AND NC.ID_NC = 46

Questa query restituiva correttamente tutti i campi, ad eccezione di CODICE_SETTORE e NOME_CODICE_SETTORE che, pur contenendo un valore nel database, vengono restituiti con valore stringa vuota (e non NULL).

Il problema si è risolto spostando il nome di questi due campi. La query proposta qui sotto funziona senza problemi. Come è possibile notare, ho spostato i campi CODICE_SETTORE e NOME_CODICE_SETTORE mettendoli subito prima del FROM.

SELECT NC.CODICE, NC.DATA, NC.DESCRIZIONE, UTENTI.USERNAME, FONTI.NOME AS NOME_FONTE, TIPI_NC.NOME AS NOME_TIPO_NC, CODICI_NC.CODICE AS CODICE_NC, CODICI_NC.NOME AS NOME_CODICE_NC, SETTORI.CODICE AS CODICE_SETTORE, SETTORI.NOME AS NOME_CODICE_SETTORE
FROM NC, FONTI, TIPI_NC, CODICI_NC, SETTORI, UTENTI
WHERE NC.ID_FONTE = FONTI.ID_FONTE AND NC.CODICE_NC = CODICI_NC.ID_CODICE_NC AND CODICI_NC.ID_TIPO_NC = TIPI_NC.ID_TIPO_NC AND NC.ID_SETTORE = SETTORI.ID_SETTORE AND NC.ID_UTENTE = UTENTI.ID_UTENTE AND NC.ID_NC = 46

Sottolineo che entrambe le query funzionano (e restituiscono i dati corretti) se eseguite dal Query Analyzer

Il codice relativo è veramente molto semplice, lo ripropongo qui di seguito:

<!--#include virtual="/include/dbconn.asp"-->

<%
  Set objConn = Server.CreateObject("ADODB.Connection")
  Set objRS = Server.CreateObject("ADODB.Recordset")
  objConn.Open strConnString

  strSQL = ""     ' <-- METTO QUI LA SELECT SCRITTA SOPRA

  objRS.Open strSQL, objConn
%>

<p class="sezione"><br><b>PRATICA <%= objRS("CODICE") %></b></p>

<p>Registrata il <%= FormatDateTime(objRS("DATA"),2) %> da <%= objRS("USERNAME") %></p>

<p>
  <b>Fonte:</b> <%= objRS("NOME_FONTE") %><br>
  <b>Tipo:</b> <%= objRS("NOME_TIPO_NC") %><br>
  <b>Codice NC:</b> <%= objRS("CODICE_NC") & " " & objRS("NOME_CODICE_NC") %><br>
  <b>Settore:</b> <%= objRS("CODICE_SETTORE") & " " & objRS("NOME_CODICE_SETTORE") %>
</p>

<%
  objRS.Close
  Set objRS = Nothing
  objConn.Close
  Set objConn = Nothing
%>


Il tutto funziona correttamente, senza nessun errore, semplicemente non viene restituito nessun valore per i campi CODICE_SETTORE e NOME_CODICE_SETTORE
Modificato da pandolf il 25 gennaio 2003 20.27 -
7 messaggi dal 06 settembre 2002
Il problema si è ancora presentato, anche con SELECT più semplici, ma a ben pensarci contenevano anche queste almeno un JOIN.
Potrebbe dipendere da questo?

Grazie Luca per la disponibilità, anche se, come vedi, il problema sembra essere senza soluzione...

Qualche suggerimento?

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.