2

我在使用 执行查询时遇到问题SqlCommand,我正在使用ExecuteScalar()方法并将打开的查询传递给它:

 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' 
4

2 回答 2

0

这篇文章的最后一章可能会对你有所帮助。他们经常玩授权。例如:

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

此外,您在代码中使用引号或类似内容有错误的可能性很小,这会将您的查询置于 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]')";
于 2013-11-29T20:15:40.650 回答
0

抱歉,但我最近读到只有在您拥有 32 位 SQL Server 时才有可能。你有X64吗?如果可以的话,我会尝试以书面形式找到它。

于 2012-11-15T23:37:04.870 回答