【问题标题】:C# how to Parse stored procedure StringC#如何解析存储过程字符串
【发布时间】:2010-06-28 06:53:30
【问题描述】:

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

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

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

我使用下面的代码执行 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";  

参数数组不正确。我不知道如何在这个中正确解析字符串

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

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

问候, 公园

【问题讨论】:

    标签: c# regex par


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-07
        • 1970-01-01
        • 1970-01-01
        • 2021-12-12
        • 1970-01-01
        相关资源
        最近更新 更多