以编程方式添加 Adomd 参数 C#

Ric*_*ano 3 c# mdx adomd.net

下午大家。

我正在构建一个 Web 应用程序,并尝试从 SSAS 多维数据集中提取一些数据。

我有以下 MDX 我想在 c# 中复制,但添加了一些参数,即两个参数,一个用于公司 123,另一个用于位置 1:

@"SELECT NON EMPTY([Dim Unit].[All Units].[Category Group Name]) ON COLUMNS
                    FROM [Info]
                    WHERE ([Dim Company].[All Companies].&[123], 
                    [Dim Location].[All Locations].&[123]&[1])"; 
Run Code Online (Sandbox Code Playgroud)

现在,我可以使用一个参数启动并运行它:

 AdomdCommand cmdPDC = conPDC.CreateCommand();
        cmdPDC.CommandText = "SELECT [Dim Unit].[All Units].[Category Group Name].Members ON 0 FROM [Info] WHERE (StrToMember(@P1)";

        string companyid = "123";

        string sP1 = "[Dim Company].&" + company;

    cmdPDC.Parameters.Add(new AdomdParameter("P1", sP1));
Run Code Online (Sandbox Code Playgroud)

但是我如何实现第二个参数,例如,如果我想在位置中粘贴一个参数?我在思考下面的思路,但我无法让小草皮工作:

AdomdCommand cmdPDC = conPDC.CreateCommand();
        cmdPDC.CommandText = "SELECT [Dim Unit].[All Units].[Category Group Name].Members ON 0 FROM [Info] WHERE (StrToMember(@P1)," + "(StrToMember(@P2))";

        string companyid = "123";
        string locationid = "1";

        string sP1 = "[Dim Company].&" + company;
        string sP2 = "[Dim Location].&" + company + "&" + location;

        cmdPDC.Parameters.Add(new AdomdParameter("P1", sP1));
        cmdPDC.Parameters.Add(new AdomdParameter("P2", sP2));
Run Code Online (Sandbox Code Playgroud)

感谢您收到任何帮助或建议。

Ric*_*ano 6

一个办法!

AdomdCommand cmdPDC = conPDC.CreateCommand();
cmdPDC.CommandText = "SELECT NON EMPTY [Dim Unit].[All Units].[Category Name].Members ON 0 FROM [MY CUBE] WHERE (StrToMember(@CompanyId),StrToMember(@LocationId))";

string companyid = "[123]";
string locationid = "[1]";

string sCompanyId = "[Dim Company].&" + companyid;
string sLocationId = "[Dim Location].&" + companyid + "&" + locationid;

cmdPDC.Parameters.Add(new AdomdParameter("CompanyId", sCompanyId));
cmdPDC.Parameters.Add(new AdomdParameter("LocationId", sLocationId));
Run Code Online (Sandbox Code Playgroud)

还有一些小提示。

您可能会收到此错误:

“无法解析 X 参数,因为它在内部子表达式中被引用”

解决方法:@CompanyId在带引号的字符串中插入时,请确保参数未包含在撇号 (') 中 - c# 很聪明,会转换数据类型并为您添加这些撇号。但是,您将无法在监视窗口中看到它,而且一切似乎都很好。

返回所有项目,并且您的参数似乎被忽略。

解决方案:首先检查SELECT并确保它是SELECT NON EMPTY.