Ricerca 
it-ITen-US
Registrazione
Accedi
In-Vesti Dotnetwork
IN-VESTI DNW!!!
Sono finalmente arrivate le nuovissime T-Shirt di DotNetWork!!! Con soli 15,00 € ci sosterrai nelle spese di gestione della Community e ti invieremo a casa una splendida maglietta.
Se vuoi contribuire al mantenimento di DotNetWork.it Vai sulla pagina Iscrizioni
Effettua il pagamento usando IWBank
Click per andare alla pagina di Iscrizione
Oppure un Bonifico bancario (le coordinate sono sulla pagina Iscrizioni), inviaci una mail a support@dotnetwork.it indicandoci la tua taglia e l'indirizzo di spedizione.  Non appena verificata la ricezione del pagamento provvederemo a spedirti la tua T-Shirt.  Le magliette sono disponibili nelle taglie S-M-L-XL-XXL (in caso di esaurimento di una delle taglie, indica quella di "Backup"). Grazie per IN-VESTIRTI con NOI!!!
.:DotNetWork Founders:.
    Stampa     


DotNetWork Forums
Recuperare i MetaDati
Ultimo Post 21 lug 2008 09.56 by Sabrina (DNW TEAM). 4 Risposte.
Stampa immediata
Ordina:
PrevPrev ProssimoProssimo
Non sei autorizzato ad inviare una risposta.
Autore Messaggi

Posts:246

--
20 lug 2008 09.48  
Sto tentando di recuperare in un colpo solo determinate informazioni sulle colonne di una tabella.
I campi per me fondamentli sono: Nome, DataType, Max Length e soprattutto PrimaryKey.

Mi sono avvicinato molto con questa query ma i risultati che ottengo sono duplicati ed il campo booleano che identifica la PK è sbagliato:

SELECT sys.columns.name AS Nome, TYPE_NAME(sys.columns.user_type_id) AS DataType, sys.columns.max_length AS Dimensione,
sys.columns.column_id, sys.indexes.is_primary_key AS ChiavePrimaria
FROM sys.indexes INNER JOIN
sys.index_columns ON sys.indexes.object_id = sys.index_columns.object_id INNER JOIN
sys.columns ON sys.index_columns.object_id = sys.columns.object_id
WHERE (sys.indexes.object_id = OBJECT_ID('dbo.titoli'))
ORDER BY sys.columns.column_id

Grazie

Andrea

Posts:666

--
20 lug 2008 11.34  
Puoi usare gli strumenti di ADO.NET:

Dim SqlCn As New SqlClient.SqlConnection("Data Source=MyServer;Integrated security = true; Initial catalog = MyDataBase")
SqlCn.Open()
Dim MetadataTable As DataTable
MetadataTable = SqlCn.GetSchema(SqlClient.SqlClientMetaDataCollectionNames.Columns)
SqlCn.Close()
Se usi un DataReader per leggere una tabella puoi usare il metodo GetSchemaTable per avere le informazioni sullo schema della query di Select usata sul Data Reader.
HTH
Alberto.

Posts:813

--
20 lug 2008 13.43  
Per generare automaticamente le Stored Procedure per le mie tabelle, io recupero tutte le informazioni sulle tabelle dal database, aggiongendo poi a queste, una serie di informazioni specifiche non codificate su DB ma predisposte su delle classi serializzate in XML.

Le query che uso x le info sono le seguenti:

-- Query x controllare se un oggetto esiste o meno
-- da usare x generare uno script di CREATE o di ALTER
private const string SQL_ExistObject = @"
DECLARE @ExistInDb bit
IF EXISTS (SELECT name
FROM sysobjects
WHERE name = @ObjectName
AND xtype = @ObjectType)
BEGIN
SET @ExistInDb = 1
END
ELSE
BEGIN
SET @ExistInDb = 0
END
SELECT @ExistInDb
";

private const string

-- Informazioni estese sui campi della tabella
-- Se guid, se identity se computed ecc.
SQL_GetColumnExtraInfo = @"
SELECT sys.all_objects.[object_id]

,sys.all_objects.[name] AS [TableName]

, sys.all_objects.[type] AS [Type]

, sys.all_columns.[name] AS [Name]
, sys.all_columns.[is_rowguidcol] AS [IsGuid]
, sys.all_columns.[is_identity] AS [IsIdentity]
, sys.all_columns.[is_computed] AS [IsComputed]

FROM sys.all_objects

INNER JOIN sys.all_columns
ON sys.all_objects.[object_id]
= sys.all_columns.[object_id]
WHERE [type] = 'U'
AND sys.all_objects.[name] = @TableName
";


-- Dati di base sulle colonne
private const string SQL_GetColumnInfo = @"
SELECT
[column_name] AS [Name]
, CASE WHEN [is_nullable] = 'YES' THEN 1 ELSE 0 END AS [Nullable]
, [Data_Type] AS [Type]
, isnull([character_maximum_length], 0) AS [Length]
, isnull([numeric_precision], 0) AS [Precision]
, isnull ([numeric_scale], 0) AS [Scale]
, column_default as [Default]
FROM
Information_schema.columns
WHERE [table_name] = @TableName
";

-- Dati sulla PK
private const string SQL_GetPkInfo = @"
SELECT CASE WHEN xtype = 'PK' THEN 1 ELSE 0 END AS [IsInPk], column_name AS [Name]
FROM
Information_schema.key_column_usage
INNER JOIN
sysobjects
ON Information_schema.key_column_usage.constraint_name =
sysobjects.[name]
WHERE xtype = 'PK'
AND table_name = @TableName
";

Spero che possano sufficierti ;)
Saluti
Sabrina


Inviato da AndreaZ on 20/07/2008 10.48.18

Sto tentando di recuperare in un colpo solo determinate informazioni sulle colonne di una tabella.
I campi per me fondamentli sono: Nome, DataType, Max Length e soprattutto PrimaryKey.

Mi sono avvicinato molto con questa query ma i risultati che ottengo sono duplicati ed il campo booleano che identifica la PK è sbagliato:

SELECT sys.columns.name AS Nome, TYPE_NAME(sys.columns.user_type_id) AS DataType, sys.columns.max_length AS Dimensione,
sys.columns.column_id, sys.indexes.is_primary_key AS ChiavePrimaria
FROM sys.indexes INNER JOIN
sys.index_columns ON sys.indexes.object_id = sys.index_columns.object_id INNER JOIN
sys.columns ON sys.index_columns.object_id = sys.columns.object_id
WHERE (sys.indexes.object_id = OBJECT_ID('dbo.titoli'))
ORDER BY sys.columns.column_id

Grazie

Andrea


Sabrina

Posts:246

--
20 lug 2008 22.28  
Speravo di poter risolvere il problema con un'unica query ma la suddivisione dei MetaDati su più tabelle da parte di SQL non me lo permette.
Se usi un DataReader per leggere una tabella puoi usare il metodo GetSchemaTable per avere le informazioni sullo schema della query di Select usata sul Data Reader

Ho fatto come hai detto, grazie.
Per generare automaticamente le Stored Procedure per le mie tabelle

Lasoluzione mi serviva proprio per questo. Magari al prossimo intoppo ti chiedo spudoratamente il tuo progetto :P
Spero che possano sufficierti

Mi hanno sufficiertato molto, grazie.

Andrea

Posts:813

--
21 lug 2008 09.56  
Se paghi bene volentieri :P :laugh: :hehe:

Inviato da AndreaZ on 20/07/2008 23.28.54

Speravo di poter risolvere il problema con un'unica query ma la suddivisione dei MetaDati su più tabelle da parte di SQL non me lo permette.
Se usi un DataReader per leggere una tabella puoi usare il metodo GetSchemaTable per avere le informazioni sullo schema della query di Select usata sul Data Reader

Ho fatto come hai detto, grazie.
Per generare automaticamente le Stored Procedure per le mie tabelle

Lasoluzione mi serviva proprio per questo. Magari al prossimo intoppo ti chiedo spudoratamente il tuo progetto :P
Spero che possano sufficierti

Mi hanno sufficiertato molto, grazie.

Andrea


Sabrina
Non sei autorizzato ad inviare una risposta.

Active Forums 4.1
       
Articoli
Fritto Misto - Classi di uso comune (Parte 6)
Helper: Alcuni metodi per organizzarci nell'uso del file System
2007/10/28 | Autore: Sabrina Cosolo
Bitmap, GDI+,Collezioni,Classi
Classi e oggetti per usare la GDI+ per disegnare delle forme.
2009/06/06 | Autore: Sabrina Cosolo
Copiare dati fra Database con ADO.Net
Da Qui a Li e da Li a Qui usando OleDb e Access
2009/02/14 | Autore: Sabrina Cosolo
Formattare le Datagridview
Come modificare il comportamento visuale di una Datagridview
2008/07/27 | Autore: Andrea Zingoni
Lavorare con gli Array
Il problema dello zaino
2007/07/29 | Autore: Alberto De Luca
Codedom Introduzione all'uso parte3
La classe Helper per le funzionalità CodeDom
2009/11/07 | Autore: Sabna Cosolo
ADO.Net Nozioni di base (parte 1)
Una libreria helper base per usare comandi diretti in SQL Server
2008/03/09 | Autore: Sabrina Cosolo
SQL Server Nozioni base (parte 2)
Come creare un database in SQL Server Usando solo il codice SQL
2008/03/09 | Autore: Sabrina Cosolo
    Stampa     
Home|Forums|Blogs|Mappa del sito
© 2007-2010 by DotNetWork  .:.  Condizioni d'uso  .:.  Privacy  .:.  Accedi  .:.