SqlCommand.ExecuteScalar with linked OLAP server 不返回任何值
本文关键字:返回 任何值 server OLAP ExecuteScalar with linked SqlCommand | 更新日期: 2023-09-27 18:36:40
我在使用 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'
抱歉,但我最近读到,这只有在您拥有 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]')";