![](/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.