![](/img/trans.png)
[英]InvalidOperationException on SqlCommand.ExecuteScalar()
[英]SqlCommand.ExecuteScalar with linked OLAP server doesn't return any value
我在使用SqlCommand
执行查询时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
或空结果,但是当我在Management Studio中运行相同的查询时,它将返回正确的值。
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'
抱歉,但我最近读到,只有在拥有32位SQL Server的情况下,才有可能。 你有X64吗? 如果可以的话,我会尝试以书面形式找到。
本文的最后一章可能会为您提供帮助。 他们经常玩授权游戏。 例如:
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]')";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.