5

Ho memorizzato le procedure (accettano i parametri) che restituiscono più set di risultati e mi piacerebbe averlo salvato in un data set tipizzato.Creare interi DataSet dalla stored procedure esistente

La domanda è: posso avere Visual Studio 2010 generare il set di dati digitato basato su stored procedure? So che posso avere questo per una singola tabella, ma ho bisogno di tutto il DataSet (più tabelle, una per ogni set di risultati)

risposta

3

Allora, facciamo un esperimento per vedere se è possibile ..

ho creato la seguente stored procedure in un database SQL 2008:

CREATE PROCEDURE dbo.StackOverflow3668337 
AS 
BEGIN 
    SET NOCOUNT ON; 

    SELECT 'First bit'; 

    SELECT 'Second bit'; 
END 

Poi ho creato un nuovo progetto in VS2010, e ha aggiunto un elemento DataSet al progetto.

Ho creato una connessione al database in Esplora server e trascinato l'elemento "StackOverflow3668337" sulla superficie del designer DataSet. Questo è il risultato:

TableAdapter from DataSet Designer

in modo che sarebbe solo una DataTable. Quindi, sfortunatamente, penso che la risposta sia fuori dagli schemi, "No".

Penso che il motivo principale per questo è che il TableAdapter classes che vengono generati sono solo legati a un singolo DataTable. È possibile avere più TableAdapter per un singolo DataTable ma tutti devono restituire gli stessi dati. Non c'è capacità per un singolo TableAdapter di interagire con altri DataTable.

3

So che questo è vecchio, ma ho risposto a questa domanda quando stavo cercando la stessa risposta/simile. Quindi ho pensato di lasciare quello che ho trovato qui per quelli che vengono dopo di me. Non è auto-magico ma questo ti porterà lì.

http://support.microsoft.com/kb/322793

Create Procedure

CREATE PROCEDURE dbo.sp_GetCustOrd 
AS 
SELECT * FROM Customers; 
SELECT * FROM Orders; 

Creare DataSet

  1. In Visual Studio .NET, dal menu File, scegliere Nuovo, quindi progetto.
  2. Fare clic su Progetti di Visual Basic in Tipi progetto e quindi fare clic su Applicazione Windows in Modelli.
  3. Nel menu Visualizza, fare clic su Esplora server.
  4. In Esplora server, fare clic su Connetti al database e quindi connettersi al database Northwind di SQL Server.
  5. Trascinare le tabelle Clienti e Ordini da Esplora server al progetto corrente. Si noti che un oggetto SqlConnection e due oggetti SqlDataAdapter vengono aggiunti al progetto.
  6. Nella finestra Proprietà, fare clic su Genera Dataset e quindi aggiungere entrambe le tabelle al DataSet. Si noti che un file .xsd viene aggiunto al progetto. Il file .xsd è denominato in base al nome scelto per la classe DataSet.

Aggiungi relazioni

  1. In Esplora soluzioni, fare doppio clic sul file XSD creato nella sezione precedente.
  2. Fare clic con il pulsante destro del mouse sulla tabella Clienti nella finestra di progettazione, scegliere Aggiungi, quindi Nuova relazione.
  3. Nella finestra di dialogo Modifica relazione, selezionare la tabella Ordini come elemento figlio, quindi fare clic su OK. Ciò crea una nuova DataRelation denominata CustomersOrders nello schema DataSet.
  4. Nel menu File, fare clic su Salva per salvare le modifiche.

Riempire

Dim da As New SqlDataAdapter("sp_GetCustOrd", SqlConnection1) 
da.SelectCommand.CommandType = CommandType.StoredProcedure 
da.TableMappings.Add("Table", "Customers") 
da.TableMappings.Add("Table1", "Orders") 
Dim ds As New CustOrd()  ' Change this name to match .xsd file name. 
da.Fill(ds) 
DataGrid1.DataSource = ds 
DataGrid1.DataMember = "Customers" 

So che questo esempio è in VB, ed ero alla ricerca di C# risposta. Ma dovrebbe essere abbastanza facile da trasferire.

+0

Posso confermare che questo metodo funziona. Sono stato in grado di restituire due tabelle in un'unica procedura e compilare un set di dati fortemente tipizzato utilizzando questo metodo. Ho anche provato a utilizzare un parametro per controllare quale tabella viene restituita. Questo ha funzionato, ma ha richiesto due chiamate a da.Fill (ds.Table) e da.Fill (ds.Table1). Non l'idea, ma funziona anche se il tuo unico obiettivo è di ridurre al minimo il numero di procedure nel tuo database. – bdwakefield