2016-05-03 7 views
1

vor allem, ich bin neu in Cassandra und ich habe Handbücher gelesen und einige (grundlegende) Tutorials darüber, wie man es eingerichtet und kommunizieren Sie mit C#.Cassandra wählen Abfrage in C#

Ich habe eine Select-Abfrage hinter einem Button Click Event. Wenn ich die Abfrage ausführen, bekomme ich folgende Fehlermeldung:

An unhandled exception of type 'System.ArgumentOutOfRangeException' occurred in Cassandra.dll 
Additional information: Value to add was out of range. 

den Code:

private void bt_select_Click(object sender, EventArgs e) 
    { 
     Connect(); 
     Row result = session.Execute("select * from meters where id = 1 AND ConnectionMeterID = 2 ALLOW FILTERING").First(); 
     CloseConnection(); 
    } 

Anmerkung * Es tatsächlich eine Zeile mit der ID existiert 1 und ConnectionMeterID 2.

Und das ist die Datenbank:

Create table meters (
ID  int, 
ConnectionMeterID int, 
ConnectionMeterRevision  int, 
PeriodStart timestamp, 
PeriodEnd timestamp, 
Volume1  float,Volume2  float,Volume3  float, 
Volume4  float,Volume5  float,Volume6  float, 
Volume7  float,Volume8  float, 
DataTypeID int, 
FileID  int, 
Remarks  text, 
QualityScore decimal, 
LocationID int, 
Removed  int, 
PRIMARY KEY (ID, ConnectionMeterID)); 

Warum tritt dieser Fehler auf?

EDIT: Stacktrace

<code> 'PloosCassandra.vshost.exe' (CLR v4.0.30319: PloosCassandra.vshost.exe): Loaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Numerics\v4.0_4.0.0.0__b77a5c5 61934e089\System.Numerics.dll'. Cannot find or open the PDB file. 
A first chance exception of type 'System.ArgumentOutOfRangeException' occurred in Cassandra.dll 
System.ArgumentOutOfRangeException: Value to add was out of range. 
Parameter name: value 
    at System.DateTime.Add(Double value, Int32 scale) 
    at System.DateTimeOffset.AddMilliseconds(Double milliseconds) 
    at  Cassandra.Serialization.Primitive.DateTimeOffsetSerializer.Deserialize(Byte[] buffer, Int32 offset) 
    at Cassandra.Serialization.Primitive.DateTimeOffsetSerializer.Deserialize(UInt16 protocolVersion, Byte[] buffer, Int32 offset, Int32 length, IColumnInfo typeInfo) 
    at Cassandra.Serialization.TypeSerializer 1.Cassandra.Serialization.ITypeSerializer.Deserialize(UInt16 protocolVersion, Byte[] buffer, Int32 offset, Int32 length, IColumnInfo typeInfo) 
    at Cassandra.Serialization.Serializer.Deserialize(Byte[] buffer, Int32 offset, Int32 length, ColumnTypeCode typeCode, IColumnInfo typeInfo) 
    at Cassandra.FrameReader.ReadFromBytes(Byte[] buffer, Int32 offset, Int32 length, ColumnTypeCode typeCode, IColumnInfo typeInfo) 
    at Cassandra.OutputRows.ProcessRowItem(FrameReader reader) 
    at Cassandra.OutputRows.ProcessRows(RowSet rs, FrameReader reader) 
    at Cassandra.OutputRows..ctor(FrameReader reader, Nullable 1 traceId) 
    at Cassandra.Responses.ResultResponse..ctor(Frame frame) 
    at Cassandra.Responses.ResultResponse.Create(Frame frame) 
    at Cassandra.FrameParser.Parse(Frame frame) 
    at Cassandra.Connection.<>c__DisplayClasse. <CreateResponseAction>b__d(MemoryStream stream) 
    at Cassandra.Tasks.TaskHelper.WaitToComplete(Task task, Int32 timeout) 
    at Cassandra.Tasks.TaskHelper.WaitToComplete[T](Task 1 task, Int32 timeout) 
    at Cassandra.Session.Execute(IStatement statement) 
    at Cassandra.Session.Execute(String cqlQuery) 
    at PloosCassandra.Form1.bt_select_Click(Object sender, EventArgs e) in c:\Users\rudi\Documents\Visual Studio  2013\Projects\PloosCassandra\PloosCassandra\Form1.cs:line 58 
+0

Keine Ausnahme ist ohne einen schönen Stack-Trace. Debuggen Sie Ihre Anwendung und lassen Sie sie bei ausgelösten Exceptions brechen, anstatt nur unbehandelte Exceptions. –

+0

@Proliges aus welcher Zeile Sie eine Exception bekommen? Was führen Sie gerade aus? Wählen Sie * aus Metern mit ID = 1 AND ConnectionMeterID = 2'? –

+0

@JeroenMostert Stacktrace hinzugefügt. – Proliges

Antwort

2

ich hier erraten werde, dass das Problem ist, dass man es als DateTime.Now.Ticks hinzugefügt, die in .NET ist die Anzahl von 100 ns Intervallen seit 1/1/1900 00:00:00. In Cassandra, Java und so ziemlich alles andere repräsentiert dies normalerweise die Zeit seit der Unix-Epoche (1.1.1970 00:00:00). Versuchen Sie, Ihren Zeitstempel in Unix Time zu konvertieren, bevor Sie Ihre Daten einfügen und sehen Sie, ob Sie den gleichen Fehler erhalten. Hier ist ein Link zu einer anderen SO Sie Frage zeigt, wie die Konvertierung zu tun:

How to convert a Unix timestamp to DateTime and vice versa?