C#从Cassandra计数器表中选择

时间:2016-10-17 09:38:29

标签: c# cassandra counter

我是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表中有值。我做错了吗?

2 个答案:

答案 0 :(得分:3)

Specified cast is not valid

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

答案 1 :(得分:3)

来自Documentation

  

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

您正在将其检索为double。你应该使用long来代替:

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