Datastax c#驱动程序不返回行数据

时间:2013-09-03 05:01:17

标签: c# cassandra

我有一个简单的列族,其中包含一行数据。查询表时,这是CQL Shell结果:

Connected to Test Cluster at localhost:9160.
[cqlsh 3.1.6 | Cassandra 1.2.8 | CQL spec 3.0.0 | Thrift protocol 19.36.0]

cqlsh:system> use cache

cqlsh:cache> SELECT locationid, payload FROM yellowbotcache;

 locationid | payload
------------+------------------
  f~123456x | This is a test 3

cqlsh:cache>

以下是用于插入表数据然后查询行的C#代码:

        Cluster cluster = Cluster.Builder().AddContactPoint("127.0.0.1").Build();
        using (Session sess = cluster.Connect())
        {
            sess.Execute("INSERT INTO cache.yellowbotcache (locationid, payload) VALUES ('f~123456x', 'This is a test 3');");

            RowSet result = sess.Execute("SELECT locationid,payload FROM cache.yellowbotcache WHERE locationid = 'f~123456x';");
            var rows = result.GetRows();
            if (rows.Count() > 0)
            {
                foreach (Row row in rows)
                {
                    string payLoad = row.GetValue<string>("payload");
                }
            }
        }

Rows返回长度为0的单行.perload = ...语句导致'index out of bounds'错误。如果我将locationid更改为不正确的值,则查询不会返回任何行。

关于这里发生了什么的任何想法?我上周从DataStax网站下载了Cassandra和驱动程序。

1 个答案:

答案 0 :(得分:4)

您正在尝试两次获取数据。首先,当你打电话给rows.Count() > 0然后再打电话。

一旦执行并迭代,Rows伪集合就无效。因此,最简单的解决方案是首先将所有结果复制到列表中。

试试这个,

var rows = rowSet.GetRows().ToList();

现在迭代列表。