2012-06-08 24 views
2

我有使用SqlCommand执行查询的问题,我使用ExecuteScalar()方法,并把开放查询到它:SqlCommand.ExecuteScalar与链接OLAP服务器不返回任何值

SELECT * FROM OpenQuery(MY_OLAP, 
'WITH MEMBER [Measures].[Out] AS 
''[Measures].[Hours]'' 
SELECT NON EMPTY [Machine].[Stops].[All] 
ON ROWS, [Measures].[Out] ON COLUMNS FROM [Machines]') 

,并试图执行查询反对链接的OLAP服务器,但只有 我得到的是object=null或空结果,但是当我在管理工作室中运行相同的查询时,它返回正确的值。比我加为了能够访问这个立方体链接服务器登录我的域用户

SqlConnection cubeConnection = new SqlConnection(cubeConnectonString); 
      using (SqlCommand cubeCmd = new SqlCommand(cubeQuery, cubeConnection)) 
      { 
       cubeConnection.Open(); 
       var tmp = cubeCmd.ExecuteScalar(); 
       if (tmp==null) { 
        cuberesult = "0"; 
       } 
       else tmp.ToString(); 

      } 

我添加链接OLAP服务器,我登录到服务器使用标准的认证,但是这并没有帮助。有人知道我错过了什么。

EXEC sp_addlinkedserver 
    @server='MY_OLAP', 
    @srvproduct='', 
    @provider='MSOLAP', 
    @datasrc='MYSQLSERVER', 
    @catalog='CUBE' 

回答

0

对不起,但我最近读过,这是唯一可能的,如果你有一个32位的SQL Server。你有X64吗?如果可以的话,我会尽力在写作中找到它。

+0

另外,您可能有双跳问题。 SSAS与MS SQL RDBMS位于同一台服务器上吗? –

0

this article的最后一章可能对您有所帮助。他们玩的授权很多。例如:

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'SSAS',@useself=N'False', 
    @locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL 

也有一个veeery可能性很小,您有报价或类似的代码错误,即把你的查询中cubeQuery变量。 @是一种安全的方式。

string cubeQuery = @"SELECT * FROM OpenQuery(MY_OLAP, 
'WITH MEMBER [Measures].[Out] AS 
''[Measures].[Hours]'' 
SELECT NON EMPTY [Machine].[Stops].[All] 
ON ROWS, [Measures].[Out] ON COLUMNS FROM [Machines]')"; 
+0

尽管此链接可能回答此问题,但最好包含答案的重要部分[此处](http://meta.stackexchange.com/a/8259),并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 – bummi