【问题标题】:C# select from Cassandra counter tableC# 从 Cassandra 计数器表中选择
【发布时间】:2016-10-17 09:38:29
【问题描述】:

我是 Cassandra 柜台领域的新手。所以我创建了一个测试环境。 我可以成功插入数据库,但是当我尝试从数据库中选择时,出现以下错误:

Cassandra.dll 中出现“System.InvalidCastException”类型的未处理异常 附加信息:指定的演员表无效。

我得到了以下数据库:

create table counterInt (
MeterID int, 
DayStamp timestamp,
NumberOfValues counter,
Value1 counter,
PRIMARY KEY ((MeterID), Daystamp));

这是我的选择方法: 编辑:当它到达row.GetValue<double>("value1"); 时发生错误 主键被选中。

public List<CSVMeter> selectBasic()
{
    Connect();
    var resultList = new List<CSVMeter>();
    RowSet result = session.Execute("select * FROM counterInt");
    foreach (Row row in result.GetRows())
    {
        CSVMeter csvMeter = new CSVMeter();
        csvMeter.MeterID = row.GetValue<int>("meterid");
        csvMeter.PeriodStart = row.GetValue<DateTime>("daystamp");
        csvMeter.Value = row.GetValue<double>("value1");
        csvMeter.NumberOfValues = row.GetValue<double>("numberofvalues");
        resultList.Add(csvMeter);
    }
    CloseConnection();
    return resultList;
}

我的对象:

public int MeterID { get; set; }
public DateTime PeriodStart { get; set; }
public double Value { get; set; }
public double Value2 { get; set; }

public CSVMeter(int meterID, DateTime periodStart, double value, double numberOfValues)
{
    this.MeterID = meterID;
    this.PeriodStart = periodStart;
    this.Value = value;
    this.Value2 = value2;
    this.NumberOfValues = numberOfValues;
    this.qualityScore = qualityScore;
}

counterInt 表中有值。我做错了吗?

【问题讨论】:

  • @JaydipJ 我不明白你的问题?它在我的对象中定义为NumberOfValues?
  • 是的,我也问同样的问题,因为在您的对象声明中没有该字段的声明
  • @JaydipJ 可能是编辑错误(最小化代码以进行概述)问题不在于numberOfValue 字段。当代码到达row.GetValue&lt;double&gt;("value1");时出现问题然后我得到无法识别的异常。
  • 我不知道 cassandra 只是想问问counter DataType 中存储了什么样的数据,即 Int,double,float..
  • @JaydipJ 显然我需要将 double 更改为 long。现在它确实有效。计数器是一个特殊的行,根据我在下面标记的答案是整数。

标签: c# cassandra counter


【解决方案1】:
Specified cast is not valid

问题当然在于您使用了 double 类型,它是十进制类型,但计数器是整数,不能转换为十进制。你当然应该改用long

【讨论】:

  • 正确。有此问题的其他人请注意:还要将数据插入为long,否则您的数据库中会出现非常非常奇怪的值。
【解决方案2】:

来自Documentation

计数器列值是一个 64 位有符号整数

您正在以double 的形式检索它。您应该使用 long 来代替:

csvMeter.Value = row.GetValue<long>("value1");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    • 2014-02-23
    • 2021-09-05
    • 2017-04-20
    • 2022-01-11
    • 1970-01-01
    • 2016-08-28
    相关资源
    最近更新 更多