2011-04-12 3 views
0

Je souhaite utiliser l'API Cryptography dans une procédure stockée CLR.Procédure stockée CLR

J'ai créé une procédure stockée CLR et écrit une instruction select

SqlConnection conn = new SqlConnection(); 
conn.ConnectionString = "Context Connection=true"; 
SqlCommand cmd = new SqlCommand(); 
cmd.Connection = conn; 
cmd.CommandText = @"select * from Employee"; 

SqlDataReader rdr = cmd.ExecuteReader(); 

Maintenant, je souhaite filtrer les résultats en utilisant le numéro d'employé qui est stocké sous forme cryptée dans la base de données pour laquelle je vais utiliser la Méthodes de cryptographie.

Maintenant, je suis coincé avec la façon de filtrer les enregistrements du SqlDataReader.

Je souhaite que le format de retour soit SqlDataReader, pour renvoyer plusieurs enregistrements de la procédure stockée CLR, il existe une méthode SqlContext.Pipe.Send() et cette méthode accepte uniquement les objets SqlDataReader.

Veuillez me guider.

Répondre

0

Je regarde un problème similaire où je veux faire une manipulation avant de retourner les résultats. La seule façon que je peux voir en ce moment est d'utiliser:

// Note you need to pass an array of SqlMetaData objects to represent your columns 
// to the constructor of SqlDataRecord 

SqlDataRecord record = new SqlDataRecord(); 

// Use the Set methods on record to supply the values for the first row of data 
SqlContext.Pipe.SendResultsStart(record); 

// for each record you want to return 
// use set methods on record to populate this row of data 

SqlContext.Pipe.SendResultsRow(record); 

Ensuite, appelez SqlContext.Pipe.SendResultsEnd lorsque vous avez terminé.

S'il y a une meilleure façon j'aimerais aussi savoir!

+0

Au lieu de filtrer les enregistrements après l'exécution de la commande, j'écris une fonction CLR qui ferait le décryptage pour moi. J'utiliserais cette fonction CLR dans mon instruction where. Par conséquent, j'obtiendrais les enregistrements filtrés que je peux envoyer directement. – Maks

Questions connexes