LocationTableType in ADO.NET

martedì 18 novembre 2008 - 14.31

Teech Profilo | Expert

Ho visto che per dichiarare una variabile al posto di un nome di tabella è necessario, per T-SQL, dichiarare la variabile come "LocationTableType":
CREATE PROCEDURE MiaProcedure @Tabella LocationTableType READONLY AS SELECT Codice, Descrizione FROM @Tabella ...
Ora vorrei utilizzare queste variabili come parametri in una mia procedura, ma non riesco
Dim sSQL As String = "SELECT Codice, Descrizione FROM @Tabella AS t" Dim cm As New SqlClient.SqlCommand(sSQL) cm.Parameters.Add("@Tabella", SqlDbType.Variant, 0) cm.Parameters.Item("@Tabella").Value = "MioServer.MioDB.MioSchema.MiaTabella"
L'eccezione restituita è: "Dichiarare la variabile di Tabella '@Tabella'"
Credo che il problema sia nell'inputazione del tipo di dato del parametro -cm.Parameters.Add("@Tabella", SqlDbType.Variant, 0)- che ho provato ad utilizzare come Variant perchè non è definito nulla per LocationTableType... Ovviamente anche VarChar non funziona...
Come posso a questo punto parametrizzare in ADO.NET delle tabelle nei miei CommandText? E' 2 giorni che ci stò impazzendo...

Grazie!!!

P.S.: per me sarebbe sufficiente parametrizzare, non tanto il nome di tabella, ma la parte di stringa che identifica la posizione della tabella (MioServer.MioDB.MioSchema)...

EDIT:
Ho notato che LocationTableType esiste solo in SQL2008... Io uso SQL2005, qualche consiglio?
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

alx_81 Profilo | Guru

>EDIT:
>Ho notato che LocationTableType esiste solo in SQL2008... Io uso SQL2005, qualche consiglio?
Se devi passare una tabella la vedo una cosa scomoda.. fino a 2005 siamo messi male..
Puoi cambiare approccio:

- se i dati sono pochi, e le colonne meno , puoi passare una stringa separata da un tuo separatore da splittare poi in una temp table all'interno della stored procedure
- se i dati sono strutturabili e non sono tantissimi, puoi passare un xml che è già supportato da 2005 e poi usare le funzionalità del datatype
- ultima soluzione, la tabella che dovresti passare interamente la scansioni riga per riga..

La situazione reale qual è?
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Teech Profilo | Expert

La situazione reale è la seguente:
ho un gestionale che replica i sui dati su un DB SQL del quale conosco la struttura (tabella clienti, articoli, fornitori, ordini, ecc...) ma non posso intervenire sulla stessa. Devo fare un'applicazione .NET per gestire delle commesse (time tracker, operatori, costi, tempi, ecc...) mettendo i dati su un DB creato da me. Nel gestionale posso fare una personalizzazione che in base a delle specifiche popola alcune tabelle del mio DB di modo che posso contare sulla possibilità di fare JOIN corretti sui dati. Questi Join li farei attraverso SP o Function in SQL per poi richiamarle dalla mia applicazione.
Quello che non so a priori, è il nome del DB del gestionale e l'istanza dove è installato: per questo motivo vorrei parametrizzare il Three/Four Part Name e poterlo passare attraverso parametri o simili...
L'errore che mi viene restituito non è un'eccezione di .NET ma un problema sulla SP (preferirei non scrivere nel mio codice la query della SP per ovvi motivi di manutenzione) e non capisco proprio come passare il dato...

Attualmente, per tamponare il problema, avendo una sola installazione dell'applicazione ho risolto scrivendo manualmente il Three Part Name nelle SP (che non sono tantissime poi usando gli alias delle tabelle non è poi un'operazione così tragica) e come specifica del programma richiedo che il mio DB sia nella stessa istanza del DB del gestionale (prerequisito che posso mantenere se non è risolvibile la questione). Questa soluzione però spero che prima o poi diventi stretta perchè spero che il programma cresca e comunque non mi pare corretto come approccio...

Grazie!!!
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5