2012-10-19 12 views
12

Voglio restituire la tabella virtuale dalla procedura memorizzata e voglio utilizzarla nel set di dati in C# .net. La mia procedura è un po 'complesso e non può trovare il modo di restituire un tavolo e lo mise in un set di datiProcedura memorizzata restituita in DataSet in C# .Net

Ecco la mia procedura per modificare:

ALTER PROCEDURE [dbo].[Procedure1] 

    @Start datetime, 
    @Finish datetime, 
    @TimeRange time 
AS 
BEGIN 

    SET NOCOUNT ON; 

    declare @TimeRanges as TABLE (SessionStart datetime, SessionEnd datetime); 

    with TimeRanges as (
    select @Start as StartTime, @Start + @TimeRange as EndTime 
    union all 
    select StartTime + @TimeRange, EndTime + @TimeRange 
    from TimeRanges 
    where StartTime < @Finish) 
    select StartTime, EndTime, Count(Test.ScenarioID) as TotalPeaks 
    from TimeRanges as TR left outer join 
     dbo.Test as Test on TR.StartTime <= Test.SessionStartTime and Test.SessionCloseTime < TR.EndTime 
    group by TR.StartTime, TR.EndTime 
END 
+2

Benvenuti a StackOverflow: se pubblichi esempi di codice, XML o di dati, si prega di ** ** evidenziare quelle linee in editor di testo e fai clic sul pulsante "code samples" ('{}') sulla barra degli strumenti dell'editor per formattarlo in modo appropriato e la sintassi lo evidenzia! –

risposta

42

Prova questa

DataSet ds = new DataSet("TimeRanges"); 
    using(SqlConnection conn = new SqlConnection("ConnectionString")) 
    {    
      SqlCommand sqlComm = new SqlCommand("Procedure1", conn);    
      sqlComm.Parameters.AddWithValue("@Start", StartTime); 
      sqlComm.Parameters.AddWithValue("@Finish", FinishTime); 
      sqlComm.Parameters.AddWithValue("@TimeRange", TimeRange); 

      sqlComm.CommandType = CommandType.StoredProcedure; 

      SqlDataAdapter da = new SqlDataAdapter(); 
      da.SelectCommand = sqlComm; 

      da.Fill(ds); 
    } 
+1

Una cosa che mi ha catturato quando ho provato a usare questa risposta era che dovevo impostare il mio tipo di comando su "CommandType.StoredProcedure". quindi sarebbe simile a questo 'sqlComm.CommandType = CommandType.StoredProcedure'. –

+0

@ Pow-Ian Grazie per aver segnalato che fuori – codingbiz

+0

nessun problema. Mi sono seduto e ho lottato per un'ora circa prima di cercarlo su google e ho trovato l'articolo [MS che mi ha dato il pezzo mancante] (http://support.microsoft.com/kb/310070). Ma certamente questo mi ha fatto guadagnare il 99,9% del tempo. Bella risposta. –

9

I dovresti dirti che i passi fondamentali e il riposo dipendono dal tuo sforzo. È necessario eseguire i seguenti passaggi.

  • Creare una stringa di connessione.
  • creare una connessione
  • SQL Crea comando SQL
  • Crea adattatore dati SQL
  • riempire il vostro set di dati.

Non dimenticare di aprire e chiudere la connessione. segui questo link per ulteriori informazioni.

+0

come risposta non penso sia stato molto utile. Salvo diversa indicazione, sento che le persone vogliono specifiche piuttosto che generici. –

1

È possibile dichiarare le istanze SqlConnection e SqlCommand a livello globale in modo da poterlo utilizzare attraverso la classe. La stringa di connessione è Web.Config.

SqlConnection sqlConn = new SqlConnection(WebConfigurationManager.ConnectionStrings["SqlConnector"].ConnectionString); 
SqlCommand sqlcomm = new SqlCommand(); 

Ora è possibile utilizzare il seguente metodo per passare i valori a stored procedure e ottenere il DataSet.

public DataSet GetDataSet(string paramValue) 
{ 
    sqlcomm.Connection = sqlConn; 
    using (sqlConn) 
    { 
     try 
     { 
      using (SqlDataAdapter da = new SqlDataAdapter()) 
      { 
       // This will be your input parameter and its value 
       sqlcomm.Parameters.AddWithValue("@ParameterName", paramValue); 

       // You can retrieve values of `output` variables 
       var returnParam = new SqlParameter 
       { 
        ParameterName = "@Error", 
        Direction = ParameterDirection.Output, 
        Size = 1000 
       }; 
       sqlcomm.Parameters.Add(returnParam); 
       // Name of stored procedure 
       sqlcomm.CommandText = "StoredProcedureName"; 
       da.SelectCommand = sqlcomm; 
       da.SelectCommand.CommandType = CommandType.StoredProcedure; 

       DataSet ds = new DataSet(); 
       da.Fill(ds);        
      } 
     } 
     catch (SQLException ex) 
     { 
      Console.WriteLine("SQL Error: " + ex.Message); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine("Error: " + e.Message); 
     } 
    } 
    return new DataSet(); 
} 

Quello che segue è il campione di stringa di connessione nel file di configurazione

<connectionStrings> 
    <add name="SqlConnector" 
     connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=YourDatabaseName;User id=YourUserName;Password=YourPassword" 
     providerName="System.Data.SqlClient" /> 
</connectionStrings> 
Problemi correlati