C#如何解析存储过程String

时间:2010-06-28 06:53:30

标签: c# regex par

我有一个来自客户端应用程序的查询字符串。它带有所有参数,如

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

在Server中,我创建了一个函数(Util.getParametersFromString)来解析来自客户端应用程序的字符串,以使用string.Split函数生成参数对象Array。 我使用','和''作为分隔符来制作对象数组。

我使用下面的代码执行db过程

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

如果参数字符串不包含逗号或单引号,我的效果很好。 如果参数字符串之一具有一个或多个逗号或单个配额标记。 如下所示

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

参数数组未正确显示。我不知道如何在这个

中正确解析字符串

情况。请给我建议解决这个问题

我不擅长英语。所以我很抱歉如果我没有正确地写我的问题

此致 公园

2 个答案:

答案 0 :(得分:1)

您可以转义单引号 - '变为''

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

至于逗号的问题 - 这取决于函数的编写方式。您必须转义逗号,并确保您的函数知道此转义序列。

答案 1 :(得分:1)

如果查询字符串的两个参数都与示例一样灵活,并且您无法按照Oded's answer中的建议更改生成此字符串的方式,则表示您遇到了问题。

例如,查询"PROCS.DBO.APP_2370_ANALYST_S 'ABC' , 'ABC' , 'ABC' , 100"可以解释为具有第一个参数"'ABC' , 'ABC'"和第二个参数"ABC",反之亦然。

另一方面,如果您的第一个参数可能不包含' s,那么您可以通过在前两个'之间查找来识别第一个参数,并在第二个参数之间查找第三个和最后一个'