2009-10-29 9 views
1

En bref, où puis-je trouver un exemple de code C#/VB côté client qui appelle la procédure stockée CLR avec un argumnet [comme une donnée sqlxml] et reçoit un lecteur de données ou une autre forme de résultat?Appel des procédures stockées CLR

Comment puis-je recevoir périodiquement des informations de la procédure stockée CLR en cours d'exécution envoyée via la méthode SQlContext.Pipe.Send()?

Répondre

0

Je sais que je l'ai souvent créé un T-SQL régulière procédure stockée qui appelle mes fonctions CLR ou stockées procs. Ensuite, ils peuvent être traités comme tous les autres procs stockés.

1
// run a stored procedure that takes a parameter 
    public void RunStoredProcParams() 
    { 
     SqlConnection conn = null; 
     SqlDataReader rdr = null; 

     // typically obtained from user 
     // input, but we take a short cut 
     string custId = "FURIB"; 

     Console.WriteLine("\nCustomer Order History:\n"); 

     try 
     { 
      // create and open a connection object 
      conn = new 
       SqlConnection("Server=(local);DataBase=Northwind;Integrated Security=SSPI"); 
      conn.Open(); 

      // 1. create a command object identifying 
      //  the stored procedure 
      SqlCommand cmd = new SqlCommand(
       "dbo.CustOrderHist", conn); 

      // 2. set the command object so it knows 
      // to execute a stored procedure 
      cmd.CommandType = CommandType.StoredProcedure; 

      // 3. add parameter to command, which 
      // will be passed to the stored procedure 
      cmd.Parameters.Add(
       new SqlParameter("@CustomerID", custId)); 

      // execute the command 
      rdr = cmd.ExecuteReader(); 

      // iterate through results, printing each to console 
      while (rdr.Read()) 
      { 
       Console.WriteLine(
        "Product: {0,-35} Total: {1,2}", 
        rdr["ProductName"], 
        rdr["Total"]); 
      } 
     } 
     finally 
     { 
      if (conn != null) 
      { 
       conn.Close(); 
      } 
      if (rdr != null) 
      { 
       rdr.Close(); 
      } 
     } 
    } 
} 

    enter code here 
+0

Merci. C'est très proche de ce que je veux. J'ai toujours un problème, comment puis-je recevoir régulièrement des mises à jour de la procédure stockée? par exemple, j'ai un CLR SPROC qui va dans une boucle et utilise "SqlContext.Pipe.Send (% Complete)" pour informer le client de la progression. Comment puis-je recevoir cette information du côté client? – captonssj

0
// Create a record object that represents an individual row, including it's metadata. 
     SqlDataRecord record = new SqlDataRecord(new SqlMetaData("stringcol", SqlDbType.NVarChar, 128)); 

     // Populate the record. 
     record.SetSqlString(0,("Hello World!" + System.DateTime.Now)); 

     // Send the record to the client. 
     SqlContext.Pipe.Send(record); 
+1

Oui, je suis conscient de cela. Comment puis-je recevoir cette information du côté client si j'ai SqlContext.Pipe.Send (enregistrement) dans une boucle? Je veux un exemple de code côté client. – captonssj

1
string connectionString = ConfigurationManager.AppSettings["ConnectDB"]; 
     SqlConnection sn = new SqlConnection(connectionString); 
     SqlParameter[] sqlParameters = new SqlParameter[1]; 
     sn.Open(); 
     SqlCommand dCmd = new SqlCommand("dbo.HelloWorld", sn); 
     dCmd.CommandType = CommandType.StoredProcedure; 
     SqlDataReader rdr = null; 
     rdr = dCmd.ExecuteReader(); 
     while (rdr.Read()) 
      { 
      for (int i = 0; i < rdr.FieldCount; i++) 
       Response.Write(rdr[i]); 
      } 
     sn.Close(); 
     } 
lien est brisé
+0

@captonssj avez-vous vérifié cela? –

Questions connexes