我是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)
谢谢
答案 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"));