Elenco tabelle del DB da asp.net

giovedì 15 giugno 2006 - 15.53

memmo77 Profilo | Expert

Come posso ottenere da asp.net un elenco delle tabelle presenti su db e inserirle in una griglia? Grazie ciao

alx_81 Profilo | Guru

ciao!
puoi ottenerle tramite stored procedure di sistema di sql server 2005 o 2000..
per sql 2005 c'è la sp_tables ad esempio..

oppure, sempre in tutti e due i casi
puoi fare la query diretta sulle sys tables.. ad esempio:


sql 2005:

select a.name, b.name
from sys.tables a
inner join sys.schemas b
on a.schema_id = b.schema_id

sql 2000

select a.name from sysobjects
where xtype = 'U'

poi in asp.net usi un datalist o un repeater per ottenere la visualizzazione che più ti piace..
spero sia sufficiente..
Alx81 =)

http://blogs.dotnethell.it/suxstellino

andreapavia Profilo | Senior Member

che sintassi uso per ottenere lo stesso risultato ma con un db access????

memmo77 Profilo | Expert

Allora, ho messo su query analyzer la stringa:
select * from sysobjects
where xtype = 'U'
e tutto funxiona. Ora il mio problema è , ma come lo richiamo su asp.net?Posso riempirci un dataset?, il mio problema e come richiamarlo da asp.net.Grazie mille ciao

alx_81 Profilo | Guru

puoi ricavarlo come meglio credi, con datareader, con datatable o dataset... come vuoi..
mentre il primo è in modalità connessa e forward only, gli altri sono disconnessi, quindi in lettura, preferisco (se non ho bisogno di gestire concorrenze o inserimenti di altri utenti nella tabella che vado ad interrogare) utilizzare quelli..
qui ti metto un esempio semplice..

imports System.Data imports System.Data.SqlClient ... Dim objConn as new SqlConnection("la tua connection string") Dim objCmd as new SqlCommand("la tua select o stored procedure", objConn) 'se è stored procedure ' objCmd.Commandtype = Commandtype.StoredProcedure Dim DA as new SqlDataAdapter(objCmd) Dim DT as new Datatable("mytable") DA.Fill(DT) If not DT is nothing andalso DT.rows.count > 0 then 'colleghi il tuo datalist con la sorgente dati DataList1.DataSource = DT DataList1.DataBind() End if

così lo hai in un datatable.. =)
Alx81 =)

http://blogs.dotnethell.it/suxstellino

memmo77 Profilo | Expert

Ciao .Ho fatto tutto quello che mi hai detto:
Session("AppConn") = "Data Source=(local);Initial Catalog=ElabFunzBanca;User Id=cobaco;Password=cobaco;"
Dim Connessione As New SqlConnection(Session("AppConn"))
Connessione.Open()
Dim objCmd As New SqlCommand("select * from sysobjects where xtype = 'U' and left(name,1) = 'M' order by name", Connessione)
Dim DA As New SqlDataAdapter(objCmd)
Dim DT As New DataTable("mytable")
DA.Fill(DT)
If Not DT Is Nothing AndAlso DT.Rows.Count > 0 Then
DataList1.DataSource = DT
DataList1.DataBind()
End If

Ma il Datalist non mi si vede proprio sulla pagina.Da che puo' dipendere? Non si genera nemmeno nessun errore, c'e' anche la try nel codice.
Ciao

alx_81 Profilo | Guru

se la query torna righe e se il datalist è impostato correttamente, dovrebbe funzionare..
hai guardato se il datatable è vuoto?

cmq, se vuoi, posta pure dell'altro codice..
Alx81 =)

http://blogs.dotnethell.it/suxstellino

memmo77 Profilo | Expert

Allora DT.Rows.Count=15 e il dt non è nothing. Il datalist1 una volta messo nella form neccessita di qualche impostazione, perchè sembra funzionare tutto ma una volta fatto il DataList1.DataBind() non mi viene visualizzato sul form.

alx_81 Profilo | Guru

mi sta venendo un dubbio.. =)
hai impostato l'itemtemplate nel datalist? sennò è vuoto!!! =)

nell'aspx devi impostare il template dell'item (ItemTemplate) ed, eventualmente, quello dell'alternating (AlternatingItemTemplate)..
come qui di seguito:

<asp:DataList ID="DataList1" runat="server" BackColor="White" BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px" CellPadding="3" GridLines="Horizontal"> <FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" /> <SelectedItemStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" /> <AlternatingItemStyle BackColor="#F7F7F7" /> <ItemStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" /> <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" /> <ItemTemplate> <%# Eval("name")%> </ItemTemplate> </asp:DataList>
Alx81 =)

http://blogs.dotnethell.it/suxstellino

memmo77 Profilo | Expert

Allora , sono sicuro che ci siamo vicinissimi.Il template non era impostato, ora pero' non mi prende <%# Eval("name")%>, deve essere un rtemplate che ho installato?

alx_81 Profilo | Guru

<% --> apertura tag aspx
%> --> chiusura tag aspx
# --> operazione di binding del dato
Eval è un metodo che valuta l'espressione relativa al binding del dato
"name" è il nome del campo che vuoi bindare.. quindi se non si chiama name, devi cambiarlo =)
considerato che name, nella tua query c'è, deve andare =)
prova a postare l'aspx

Alx81 =)

http://blogs.dotnethell.it/suxstellino

memmo77 Profilo | Expert

L'asp è questo:
Session("AppConn") = "Data Source=(local);Initial Catalog=ElabFunzBanca;User Id=cobaco;Password=cobaco;"
Dim Connessione As New SqlConnection(Session("AppConn"))
Connessione.Open()
Try
Dim objCmd As New SqlCommand("select * from sysobjects where xtype = 'U' and left(name,1) = 'M'order by name", Connessione)
Dim DA As New SqlDataAdapter(objCmd)
Dim DT As New DataTable("mytable")

DA.Fill(DT)

If Not DT Is Nothing AndAlso DT.Rows.Count > 0 Then
'colleghi il tuo datalist con la sorgente dati
DataList1.DataSource = DT
DataList1.DataBind()
End If
Catch Ex As SqlException
Session("Errore") = "Pagina: elab\n\nFunzione: Dizionario_campi\n\n" & ex.Message
Exit Try
Catch ex As Exception
Session("Errore") = "Pagina: elab\n\nFunzione: Dizionario_campi\n\n" & ex.Message
Exit Try
Finally
If Not Connessione Is Nothing Then
If Connessione.State = ConnectionState.Open Then
Connessione.Close()
End If
Connessione = Nothing
End If
End Try

ma l'errore che mi ritorna adesso è questo:

BC30451: Nome 'Eval' non dichiarato.

memmo77 Profilo | Expert

Ti ringrazio infinitamente della disponibilità, ho risolto con un altra datagrid aprendo un dataset con la stessa select . Grazie mille ciao.

ps. devo accettare la risposta per chiudere il post?Ciao

alx_81 Profilo | Guru

diciamo che se la accetti mi fai una simpatia =)
Alx81 =)

http://blogs.dotnethell.it/suxstellino

memmo77 Profilo | Expert

Risposta accettata .Grazie mille ancora.ciao
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