首页 文章

Mono为Microsoft Analysis Server开发Microsoft身份验证

提问于
浏览
2

For my research I need to be able to query a Microsoft analysis server(2012) Data cube with the Unity game engine. 对于连接,需要Microsoft身份验证,Unity正在使用Mono Develop库进行SQL连接,这给我一个问题 . 到目前为止,我还没有找到Mono能够使用Microsoft身份验证的解决方案 .

我想找到一种在客户域内使用Windows身份验证的好方法 . 由于最终应用程序必须能够使用连接字符串连接到数据立方体 .

使用允许使用SOAP进行HTTP连接的IIS服务器的数据立方体并不总是可用,具体取决于客户设置 . 在多个平台上构建应用程序的愿望也很难添加自定义库,如果有这个请求的自定义库,因为我还没有找到它 .

我目前不那么幸运的选择是:

  • 使用visual studio构建一个额外的Windows应用程序,查询数据并将其解析为Unity(但需要运行额外的应用程序) .

  • 将http SOAP连接与IIS服务一起使用(但需要使用IIS设置分析服务器,这取决于客户并不总是可行) .

  • 找到一个允许我使用Microsoft身份验证的库(但可能只适用于Windows平台,或者不适用于Unity) .

我希望有人已经找到或者可能知道一个适用于Unity的好解决方案而不会给出我上面提到的限制 .


我正在使用Microsoft.AnalysisServices.AdomdClient;视觉工作室适用于视觉工作室构建,但不能在单一开发中工作 .

try
        {
            using (AdomdConnection adcon = new AdomdConnection(connectionString))
            {
                adcon.Open();
                using (AdomdCommand adcmd = adcon.CreateCommand())
                {
                    adcmd.CommandText = textBox3.Text.ToString();
                    AdomdDataReader dr = adcmd.ExecuteReader(CommandBehavior.CloseConnection);

                    while (dr.Read())
                    {
                        for (int i = 0; i < dr.FieldCount; i++)
                            textBox2.AppendText(dr[i] + (i == dr.FieldCount - 1 ? "" : ", ") + Environment.NewLine);
                    }
                    dr.Close();
                    textBox2.AppendText(adcmd.CommandText.ToString() + Environment.NewLine + Environment.NewLine);

                    adcmd.Connection.Close();
                }

                adcon.Close();
            }
        }
        catch(Exception e)
        {
            textBox2.AppendText(e.ToString() + Environment.NewLine);
        }

感谢您的任何建议,反馈或答案!

1 回答

  • 0

    您可以尝试使用关系SQL Server引擎作为一种代理 . 只要Analysis Services可用,关系SQL Server引擎就应该可用 .

    您可以在关系SQL Server中设置链接服务器,该服务器使用Analysis Services OLEDB客户端链接到Analysis Services服务器 . here描述了如何设置链接服务器 .

    然后你可以将MDX发送到这个链接服务器,并在关系引擎中取回结果,如下所示:

    select * from openquery(AdventureWorksOLAP, 
             'select [Measures].[Sales Amount] on columns from [Adventure Works]')
    

    其中 AdventureWorksOLAP 是链接服务器的名称 .

    但是,您应该知道列名称很奇怪(包含结束方括号,需要通过加倍包含列名的方括号内进行转义) . E. g . 上面的查询将有一个您必须作为 [[Measures]].[Sales Amount]]] 访问的列 . 此外,所有单元格值都返回 nvarchar ,可能需要将其转换为数字类型才能使用它们 .

    也许您可以将列名称更改和列类型转换封装到存储过程中 .

    您可以使用SQL Server身份验证来访问关系数据库 .

相关问题