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 回答
您可以尝试使用关系SQL Server引擎作为一种代理 . 只要Analysis Services可用,关系SQL Server引擎就应该可用 .
您可以在关系SQL Server中设置链接服务器,该服务器使用Analysis Services OLEDB客户端链接到Analysis Services服务器 . here描述了如何设置链接服务器 .
然后你可以将MDX发送到这个链接服务器,并在关系引擎中取回结果,如下所示:
其中
AdventureWorksOLAP
是链接服务器的名称 .但是,您应该知道列名称很奇怪(包含结束方括号,需要通过加倍包含列名的方括号内进行转义) . E. g . 上面的查询将有一个您必须作为
[[Measures]].[Sales Amount]]]
访问的列 . 此外,所有单元格值都返回nvarchar
,可能需要将其转换为数字类型才能使用它们 .也许您可以将列名称更改和列类型转换封装到存储过程中 .
您可以使用SQL Server身份验证来访问关系数据库 .