2016-10-17 3 views
2

Я новичок в полях поля Cassandra. Поэтому я создал тестовую среду. Я могу успешно вставить в базу данных, но когда я пытаюсь выбрать из базы данных, я получаю следующее сообщение об ошибке:C# выберите из таблицы счетчиков Cassandra

An unhandled exception of type 'System.InvalidCastException' occurred in Cassandra.dll Additional information: Specified cast is not valid.

я получил следующую базу данных:

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 таблице. Я делаю что-то неправильно?

+0

@JaydipJ Я не понимаю ваш вопрос? Он определен в моем объекте как «NumberOfValues»? – Proliges

+0

Да, я спрашиваю об этом, так как в объявлении объекта нет объявления для этого поля –

+0

@JaydipJ может быть ошибкой редактирования (сводя к минимуму код для обзора), проблема не в поле «numberOfValue». Проблема возникает, когда код достигает 'row.GetValue (" value1 ");' Тогда я получаю не распознанное исключение. – Proliges

ответ

3
Specified cast is not valid 

Вопрос, конечно, о том, что вы используете double тип, который является типом десятичного, но счетчики являются целыми числами и не можете быть отлиты в виде десятичной дроби. Вместо этого вы должны использовать long.

+0

Исправить. Обратите внимание на других людей с этой проблемой: также вставьте данные как 'long', иначе вы получите очень странные значения в своей базе данных. – Proliges

3

От Documentation:

A counter column value is a 64-bit signed integer

Вы запрашиваете его как double. Вы должны использовать длинный вместо этого:

csvMeter.Value = row.GetValue<long>("value1"); 
Смежные вопросы