预期为8或0个字节长(4)

时间:2019-05-04 08:08:45

标签: c# cassandra

我是cassandra的新手。我正在使用最新版本的cassandra。在新添加的表中插入数据时,出现异常“预期为8或0字节长(4)”。我在.net中使用CassandracsharpDriver 。我的代码和查询是

代码块:

Query : string query =
   "INSERT INTO test_table(Id,Name,Date,CreatedOn) values (?,?,?,?)";

BatchStatement("_test", query, 394741470, "test", "2019-05-06");

public void BatchStatement(string keySpace, string query,params object[] parameter)
    {
        try
        {
            BatchStatement objBatchStatement = new BatchStatement();
            PreparedStatement statement = PrepareQueryStatement(keySpace, query);
            objBatchStatement.Add(statement.Bind(parameter));
            var session = cluster.Connect(keySpace);
            //objBatchStatement.ConsistencyLevel
            // Execute the batch
            // RowSet row = session.Execute(query);
            RowSet row = session.Execute(objBatchStatement);

        }            
        catch (Exception ex)
        {
            Console.WriteLine("Excpetion occured during batch operation method Name BatchStatement error : " + ex.ToString());
        }

    }

//session.Execute(objBatchStatement); code is throwing excpetion expected 8 or 0 byte long (4)

谢谢

1 个答案:

答案 0 :(得分:2)

猜猜:这是值类型推断的经典案例。 您正在使用查询:

INSERT INTO test_table(Id,Name,Date,CreatedOn) values (?,?,?,?)";

BatchStatement("_test", query, 394741470, "test", "2019-05-06");

这里394741470是C#中的int。因此,驱动程序将其序列化为CQL int(4字节),但是服务器希望使用CQL bigint(8字节)。解决方法是指定正确的类型:

您可以尝试以下操作:

BatchStatement("_test", query, 394741470L, "test", "2019-05-06");

或者它可能与日期有关。您的日期是字符串。尝试使用DateTime。

BatchStatement("_test", query, 394741470L, "test", Convert.ToDateTime("2019-05-06"));