2010-06-28 31 views
1

J'ai une chaîne de requête à partir de l'application cliente. Il est livré avec tous les paramètres commeC# comment analyser la procédure stockée Chaîne

string query="PROCS.DBO.APP_2370_ANALYST_S 'ABC' , 'TESTDATA' , 100"; 

Dans Serveur, j'ai fait une fonction (Util.getParametersFromString) pour analyser la chaîne de l'application client pour faire l'objet Paramètre tableau en utilisant la fonction string.split. J'ai utilisé ',' et '' comme séparateur pour créer un tableau d'objets.

Et j'exécute la procédure db en utilisant le code ci-dessous

object[] parameters = Util.getParametersFromString(query); 
DbCommand cmd = dbconnection.GetStoredProcCommand("PROCS.DBO.APP_2370_ANALYST_S",  parameters); 

I fonctionne bien si la chaîne de paramètre ne contient pas une virgule ou guillemet simple. Si l'une des chaînes de paramètres comporte une ou plusieurs virgules ou marque de quota unique. Comme ci-dessous

string query="PROCS.DBO.APP_2370_ANALYST_S 'A,B,C' , 'Hi, Sam 'The Legend' Brown was here ' , 100"; 
tableau de paramètres

ne venait pas correctement. Je ne savais pas comment analyser la chaîne correctement dans cette situation

. S'il vous plaît donnez-moi des conseils pour résoudre ce problème

Je ne suis pas bon en anglais. Je suis donc désolé si je n'ai pas écrit ma question correctement

Cordialement, Parc

Répondre

1

Vous pouvez échapper aux guillemets simples - ' devient '':

string query="PROCS.DBO.APP_2370_ANALYST_S 'A,B,C' , 'Hi, Sam ''The Legend'' Brown was here ' , 100"; 

En ce qui concerne le problème avec virgule - cela dépend de la façon dont votre fonction est écrite. Vous devrez échapper la virgule et assurez-vous que votre fonction est consciente de cette séquence d'échappement.

1

Si les deux paramètres de votre chaîne de requête sont aussi flexibles que votre exemple, et que vous ne pouvez pas modifier la façon dont cette chaîne est générée comme suggéré dans Oded's answer, vous avez un problème. Par exemple, la requête "PROCS.DBO.APP_2370_ANALYST_S 'ABC' , 'ABC' , 'ABC' , 100" peut être interprétée comme ayant le premier paramètre "'ABC' , 'ABC'" et le second paramètre "ABC" ou vice versa.

Si, d'autre part, votre premier paramètre ne peut pas contenir ' s, vous pourriez alors identifier le premier paramètre en regardant entre les deux premiers ' s, et le second paramètre en tombant entre le troisième et le dernier '.