Accesso dati sql via javascript.

martedì 02 settembre 2008 - 10.11

secks Profilo | Senior Member

Da una funzione javascript in una pagina ASP.NET dovrei riuscire ad accedere ai dati di una tabella SQL Server 2000.
Qualche dritta?

Ciao a tutti.
Paolo.

luigidibiasi Profilo | Guru

Soluzione semplice o articolata?

Innanzitutto cosa ti interessa fare?
Luigi Di Biasi

secks Profilo | Senior Member

>Soluzione semplice o articolata?
>
>Innanzitutto cosa ti interessa fare?
>Luigi Di Biasi

Dovrei leggere una tabellina clienti dal server clienti per prendere l'indirizzo, città e CAP.
La funzione deve essere in javascript perchè devo accedere alle librerie Maps di Google, i cui esempi sono appunto in js.
La mia intenzione era di accedere direttamente ai dati sql mediante una connessione al server.
Del tipo:

// Selezione di tutti i clienti
var cn = CreateObject("ADODB.Connection");
var rs = CreateObject("ADODB.Recordset");
var s = "SELECT * FROM AnaClienti"
cn.Open "server=SRVAUX02;uid=sa;pwd=Pippo;database=DataBaseSql";
rs.Open(s,cn);
while(!rs.EOF)
{
// Scrivo l'indirizzo.
rs.MoveNext;
}

rs.Close;
rs=Nothing;

Non so' se sono sulla strada giusta ...

luigidibiasi Profilo | Guru

>> Dovrei leggere una tabellina clienti dal server clienti per prendere l'indirizzo, città e CAP.
>> La funzione deve essere in javascript perchè devo accedere alle librerie Maps di Google, i cui esempi sono appunto in js.
>> La mia intenzione era di accedere direttamente ai dati sql mediante una connessione al server.
>> Del tipo:

La funzione che tu vuoi utilizzare richiede che il pc client abbia installato ado.

Non sò se javascript preveda quel CreateObject (vbscript lo prevede) che hai utilizzato perchè non ho mai creato oggetti ado direttamente nel client. (per evitare protezioni)

Essendo in una pagina asp potresti pensare di utilizzare una cosa del genere:

<script language="javascript">
// ci creiamo un oggetto array javascript per contenerci i dati
// che ci servono.

// questa parte di script và sopra il codice che usa google così
// vedi l'array nello scope

// il contenitore
var array_contenitore = new Array();
var indexCliente = 0;

<%
// il recupero di dati lo scrivo in vb tanto usi asp

set cn = createObject("adodb.connection");
cn.open("stringa_connessione");
set rs = cn.execute("select * from anaclienti")

do while not rs.eof

%>

// riempiamo il contenitore

array_contenitore[<%=index_cliente%>]['NOME']='<%=rs("FIELD_NOME")%>';
array_contenitore[<%=index_cliente%>]['CAP']='<%=rs("FIELD_CAP")%>';


<%

// aggiorniamo il puntatore al cliente
index_cliente = index_cliente +1

rs.movenext
loop

%>

// proviamo se tutto è andato ok

alert(array_contenitore[0]['NOME']); // dovrebbe mostrare il nome del primo cliente


</script>


Spero che possa esserti utile così com'è altrimenti se hai qualche vincolo sull'utilizzo di asp
possiamo vedere diversamente
Luigi Di Biasi

secks Profilo | Senior Member

Ho provato

><%
> // il recupero di dati lo scrivo in vb tanto usi asp
>
> set cn = createObject("adodb.connection");
> cn.open("stringa_connessione");
> set rs = cn.execute("select * from anaclienti")
>
> do while not rs.eof
>
>%>

ma dice che 'set' e 'let' non sono più utilizzati dal linguaggio (ASP.NET)

Ho provato allora la seguente

<%

dim cn = createObject("adodb.connection")
cn.open("server=SRVAUX02;uid=sa;pwd=Pippo;database=DataBaseSql")
dim rs = cn.execute("select * from anaclienti")
do while not rs.eof
txt.text = "OK"
rs.MoveNext
loop

rs.close
cn.close

%>

ma da il seguente errore:

[Microsoft][Driver Manager ODBC] Nome origine dati non trovato e driver predefinito non specificato.

a questo punto mi converrebbe aprire la tabella da code-behind, dove ho tutti gli accessi e le librerie SQL, ma non so se è possibile dalla funzione js vedere la tabella.

Che ne dici?

luigidibiasi Profilo | Guru

>>Ho provato

>>><%
>>> // il recupero di dati lo scrivo in vb tanto usi asp
>>>
>>> set cn = createObject("adodb.connection");
>>> cn.open("stringa_connessione");
>>> set rs = cn.execute("select * from anaclienti")
>>>
>>> do while not rs.eof
>>>
>>>%>

>>ma dice che 'set' e 'let' non sono più utilizzati dal linguaggio (ASP.NET)

si in effetti pesavo usavi ASP e non ASP.NET :)


>>Ho provato allora la seguente

<%

dim cn = createObject("adodb.connection")
cn.open(sConn)
dim rs = cn.execute("select * from anaclienti")
do while not rs.eof
txt.text = "OK"
rs.MoveNext
loop

rs.close
cn.close

%>

ma da il seguente errore:

>>[Microsoft][Driver Manager ODBC] Nome origine dati non trovato e driver predefinito non specificato.

questo lo puoi risolvere creando una origine ODBC sul server e ti risparmi tutta la stringa di connessione altrimenti devi
usare una stringa di tipo OLEDB :

StrConnect = "Provider = SQLOLEDB;Data Source = nome_della_macchina_server;Database = nome_del_db;User ID = user_id; Password=password"

>>a questo punto mi converrebbe aprire la tabella da code-behind, dove ho tutti gli accessi e le librerie SQL, ma non so se è possibile dalla funzione js >>vedere la tabella.

La tabella da Javascript non la vedi (usando questo metodo)... se riesci a collegarti al volo come abbiamo scritto prima ti crei l'oggetto array_contenitore e lo usi direttamente in javascript.

Comunque, puoi utilizzare qualsiasi modo tu voglia per collegarti al db, la parte importante era la scrittura dell'array da cui poi leggerti i dati
che ti interessano.

Se vuoi puoi postarmi i dati per la connessione e ti scrivo la funzione completa perchè se ho ben capito devi segnare sulle mappe
la posizione dei clienti e qui dove lavoro hanno fatto un programma simile pochi giorni fà.


>>Che ne dici?

credo vada bene con la stringa di connessione OLE senza chiamare in causa altri oggetti :)
Luigi Di Biasi

secks Profilo | Senior Member

Ho provato:

<%
dim sCon = "Provider = SQLOLEDB; Data Source = SRVAUX02; Database = Pippo; User ID = sa; Password=aaaaa"

dim cn = Server.CreateObject(ADODB.Connection)
cn.open sCon


%>

Ma non riconosce ADODB.

Penso che proverò a seguire un esempio su xml.

PS puoi entrare in modifica e cancellare i dati del mio server nella tua ultima risposta? grazie.

luigidibiasi Profilo | Guru

ok cancellati

ma in server.CreateObject("ADODB.Connection") ti dà quel problema?
Luigi Di Biasi

secks Profilo | Senior Member

>ok cancellati
Grazie!


>ma in server.CreateObject("ADODB.Connection") ti dà quel problema?

Ecco l'errore ( la reference è stata importata):

Descrizione: Errore durante la compilazione di una risorsa necessaria per soddisfare la richiesta. Rivedere i dettagli relativi all'errore e modificare in modo appropriato il codice sorgente.

Messaggio di errore del compilatore: BC30451: Nome 'ADODB' non dichiarato.

Errore nel codice sorgente:



Riga 76:
Riga 77: dim sCon = "Provider = SQLOLEDB; Data Source = SRVAUX02; Database = Pippo; User ID = sa; Password=aaaa"
Riga 78: dim cn = Server.CreateObject(ADODB.Connection)
Riga 79: cn.open sCon
Riga 80:


File sorgente: http://localhost/Axiendanet/zProva1/WebForm4.aspx Riga: 78



Mostra dettagli dell'output del compilatore:


C:\WINDOWS\system32> "c:\windows\microsoft.net\framework\v1.1.4322\vbc.exe" /t:library /utf8output /R:"c:\windows\microsoft.net\framework\v1.1.4322\temporary asp.net files\axiendanet_zprova1\13b8dc11\a3e35d54\vlovlpb_.dll" /R:"c:\windows\assembly\gac\system.web.services\1.0.5000.0__b03f5f7f11d50a3a\system.web.services.dll" /R:"c:\windows\microsoft.net\framework\v1.1.4322\temporary asp.net files\axiendanet_zprova1\13b8dc11\a3e35d54\assembly\dl2\7385f1ab\00094fca_e186c801\interop.excel.dll" /R:"c:\windows\assembly\gac\system\1.0.5000.0__b77a5c561934e089\system.dll" /R:"c:\windows\assembly\gac\system.web\1.0.5000.0__b03f5f7f11d50a3a\system.web.dll" /R:"c:\windows\microsoft.net\framework\v1.1.4322\temporary asp.net files\axiendanet_zprova1\13b8dc11\a3e35d54\assembly\dl2\7663595b\805389d6_ee28c701\interop.adox.dll" /R:"c:\windows\microsoft.net\framework\v1.1.4322\temporary asp.net files\axiendanet_zprova1\13b8dc11\a3e35d54\assembly\dl2\8d4908f3\006043f6_e967c701\interop.msxml2.dll" /R:"c:\windows\microsoft.net\framework\v1.1.4322\temporary asp.net files\axiendanet_zprova1\13b8dc11\a3e35d54\assembly\dl2\5b17b2cc\d6c0dcea_f60cc901\ugendef.dll" /R:"c:\windows\assembly\gac\system.web.mobile\1.0.5000.0__b03f5f7f11d50a3a\system.web.mobile.dll" /R:"c:\windows\assembly\gac\system.data\1.0.5000.0__b77a5c561934e089\system.data.dll" /R:"c:\windows\microsoft.net\framework\v1.1.4322\temporary asp.net files\axiendanet_zprova1\13b8dc11\a3e35d54\assembly\dl2\0e83ad4f\0083c271_d62ac801\interop.microsoft.office.core.dll" /R:"c:\windows\microsoft.net\framework\v1.1.4322\temporary asp.net files\axiendanet_zprova1\13b8dc11\a3e35d54\assembly\dl2\717d90e1\44449902_ff0cc901\ugenfun.dll" /R:"c:\windows\microsoft.net\framework\v1.1.4322\temporary asp.net files\axiendanet_zprova1\13b8dc11\a3e35d54\assembly\dl2\01f499d1\3c40bfeb_f60cc901\ugenuty.dll" /R:"c:\windows\assembly\gac\system.enterpriseservices\1.0.5000.0__b03f5f7f11d50a3a\system.enterpriseservices.dll" /R:"c:\windows\assembly\gac\system.xml\1.0.5000.0__b77a5c561934e089\system.xml.dll" /R:"c:\windows\assembly\gac\system.drawing\1.0.5000.0__b03f5f7f11d50a3a\system.drawing.dll" /R:"c:\windows\microsoft.net\framework\v1.1.4322\temporary asp.net files\axiendanet_zprova1\13b8dc11\a3e35d54\assembly\dl2\92dee1b9\2c916c04_ff0cc901\zprova1.dll" /R:"c:\windows\microsoft.net\framework\v1.1.4322\temporary asp.net files\axiendanet_zprova1\13b8dc11\a3e35d54\assembly\dl2\4195525e\0041b585_aa41c301\interop.vbide.dll" /out:"C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files\axiendanet_zprova1\13b8dc11\a3e35d54\afloibsd.dll" /D:DEBUG=1 /debug+ /win32resource:"C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files\axiendanet_zprova1\13b8dc11\a3e35d54\afloibsd.res" "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files\axiendanet_zprova1\13b8dc11\a3e35d54\afloibsd.0.vb"


Compilatore Microsoft (R) Visual Basic .NET versione 7.10.6001.4
per Microsoft (R) .NET Framework versione 1.1.4322.2407
Copyright (C) Microsoft Corporation 1987-2002. Tutti i diritti riservati.

http://localhost/Axiendanet/zProva1/WebForm4.aspx(78) : error BC30451: Nome 'ADODB' non dichiarato.

dim cn = Server.CreateObject(ADODB.Connection)
~~~~~
http://localhost/Axiendanet/zProva1/WebForm4.aspx(79) : error BC30800: Gli argomenti del metodo devono essere racchiusi tra parentesi.

cn.open sCon
~~~~




luigidibiasi Profilo | Guru

che errore strano

io comunque per istanziare l'oggetto uso

dim cn as adodb.connection = new adodb.connection()

e non server.createObject


Luigi Di Biasi
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5