2016-10-17 8 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)); 

これは私のselectメソッドです。 編集:ヒット時にエラーが発生する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 

問題は、decimal型ですが、カウンターが整数であり、小数としてキャストすることはできませんdoubleタイプを使用しているという事実については確かです。確かに代わりにlongを使用する必要があります。 Documentationから

+0

正しい。この問題を抱える他の人に注意してください。また、データを 'long'として挿入してください。さもなければ、データベースに非常に奇妙な値が得られます。 – Proliges

3

A counter column value is a 64-bit signed integer

あなたはdoubleとしてそれを取得しています。あなたは長い代わりに使用する必要があります:

csvMeter.Value = row.GetValue<long>("value1"); 
関連する問題