2010-06-28 65 views
1

我有一个来自客户端应用程序的查询字符串。它配备了所有的参数,如C#如何解析存储过程字符串

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

在服务器,我做了一个函数(Util.getParametersFromString)从客户端应用程序解析字符串中使用string.Split功能进行参数对象数组。 我用','和''作为分隔符来创建对象数组。

我用下面的代码

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

执行DB程序我工作得很好,如果参数字符串不包含逗号或单引号。 如果其中一个参数字符串具有一个或多个逗号或单个配额标记。 Like below

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

参数数组未正确显示。我不知道如何正确解析字符串在这

的情况。请给我意见,以解决这个问题

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

问候, 公园

回答

1

您可以逃脱单引号 - '变成''

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

至于有问题逗号 - 这取决于你的函数是如何写的。你将不得不逃离逗号并确保你的函数知道这个转义序列。

1

如果查询字符串的两个参数都与您的示例一样灵活,并且您不能像Oded's answer中所建议的那样更改此字符串的生成方式,则会出现问题。

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

如果,另一方面,你的第一个参数可能不包含' s,则你可以由前两个' S之间寻找确定的第一个参数,以及由第三和最后一个'之间下降的第二个参数。