AdomdDataReader GetValue(0) 返回 ????而不是非英文字符

AdomdDataReader GetValue(0) returning ???? instead of non-english characters

我的目标是通过 C# Azure 函数应用从 Azure 分析服务中某些表的某些列中获取所有唯一值。

我的代码工作正常,但是来自 AdomdDataReader 的 GetValue returns '?'字符串而不是汉字。对于英文字符串,它工作正常。如何使用 AdomdDataReader 处理检索非英语字符串?我看不出有其他方法可以从文档中检索值。

谢谢。

代码如下:

AdomdConnection conn = new AdomdConnection($"Data Source={server};User ID=app:{appId};Password={authKey};Catalog={dataBase}");

        List<ColumnData> cols = CreateData();

        List<List<Object>> lists = new List<List<Object>>();

        foreach (var col in cols)
        
        {
            Console.WriteLine($"tableName: {col.tableName}, columnMame: {col.columnName}");
            // string txt = "SELECT DISTINCT({[Timeframes].[Timeframe].[Timeframe]}) on columns, DISTINCT({[DimRetailer].[Consumer Global Parent].[Consumer Global Parent]}) on rows from [Model]";
            string txt1 = "SELECT DISTINCT({[DimOSVersion].[OS Version].[OS Version]}) on columns, ";
            string txt2 = "DISTINCT({[" + col.tableName + "].[" + col.columnName + "]" + ".[" + col.columnName + "]}) on rows from [Model]";
            string txt = txt1 + txt2;
            conn.Open();
            AdomdCommand cmd = new AdomdCommand(txt, conn);
            AdomdDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            List<Object> list = new List<Object>();
            lists.Add(list);

            // output the rows in the DataReader
            while (dr.Read())
            {

                var value = dr.GetValue(0);
                if(value != null)
                    if (value.ToString() !=  null)
                        list.Add(value);
                
            }

            dr.Close();
        }

我可以重现你的问题。我也得到'????'当数据是中文时我这边。

我不确定你这边的OS,如果你的OS是win10,那么步骤如下:

问题出在您机器的系统位置。以上就是解决方法

之后的代码可以正常工作,而不是 return '????':

部署您的函数应用后,它应该也能正常工作。应该是你机器的问题