2008-12-31 6 views

Répondre

1

Votre texte SQL peut contenir plusieurs commandes. Si vous renvoyez plusieurs ensembles de résultats, vous pouvez utiliser un DataReader et utiliser la fonction NextResult. Ce que je fais souvent est de stocker le SQL à exécuter en tant que ressource incorporée, puis charger ce texte. S'il contient des paramètres, définissez les paramètres comme vous le feriez normalement.

Par exemple, j'ai un fichier:

UPDATE dbo.QuotePricedLineItem 
SET fkQuoteVendorLineSet = NULL 
FROM dbo.QuotePricedLineItem qpli 
INNER JOIN dbo.QuoteLineItem qli ON qpli.Id = qli.Id 
WHERE qli.fkQuote = @quoteId AND qpli.fkQuoteVendorLineSet = @ciscoConfigId 

DELETE CiscoQuoteLineItem 
FROM CiscoQuoteLineItem cqli 
INNER JOIN QuoteLineItem qli ON cqli.Id = qli.Id 
WHERE qli.fkQuote = @quoteId AND cqli.fkCiscoQuoteVendorLineSet = @ciscoConfigId 

que j'exécute en tant que tel:

using (SqlConnection conn = DbUtils.CreateConnection() as SqlConnection) 
{ 
    conn.Open(); 

    SqlCommand cmd = conn.CreateCommand(); 
    cmd.CommandText = MvcApplication.GetResource("SQL.DemoteCiscoQuoteLineItems.sql"); 
    cmd.Parameters.AddWithValue("@quoteId", q.Id); 
    cmd.Parameters.AddWithValue("@ciscoConfigId", configSetId); 
    cmd.ExecuteNonQuery(); 
} 

Notez que MvcApplication.GetResource n'est pas une fonction intégrée - il est celui que vous devez écrire ... voici le mien:

public static string GetResource(string p) 
{ 
    Stream s = Assembly.GetExecutingAssembly().GetManifestResourceStream("CortexQuoting.Res." + p); 
    if (s == null) return null; 

    StreamReader sw = new StreamReader(s); 
    string ss = sw.ReadToEnd(); 
    sw.Close(); 
    return ss; 
} 
Questions connexes