嘿,有人遇到过这个问题,其中ADO.net连接器返回"列的值无效:预期的INT64"当列参数以其他方式排序时:
错误详情: "操作被拒绝,因为系统未处于操作执行所需的状态。 状态(StatusCode = FailedPrecondition,Detail =" Table Table1中列GeographyKey的值无效:预期的INT64。")"
var qry = "DELETE Table1";
var col = new SpannerParameterCollection();
col.Add("CustomerKey", SpannerDbType.Int64, 0);
col.Add("EmailAddress", SpannerDbType.String, "some@email.com");
col.Add("GeographyKey", SpannerDbType.Int64, 37);
这一个在CustomerKey上抛出错误:
var qry = "DELETE Table1";
var col = new SpannerParameterCollection();
col.Add("EmailAddress", SpannerDbType.String, "some@email.com");
col.Add("GeographyKey", SpannerDbType.Int64, 37);
col.Add("CustomerKey", SpannerDbType.Int64, 0);
但是当列以这种方式排列时,在第一个列表中移动GeographyKey和CustomerKey,它不会抛出错误
var qry = "DELETE Table1";
var col = new SpannerParameterCollection();
col.Add("GeographyKey", SpannerDbType.Int64, 37);
col.Add("CustomerKey", SpannerDbType.Int64, 0);
col.Add("EmailAddress", SpannerDbType.String, "some@email.com");
答案 0 :(得分:0)
删除突变将KeySet作为其唯一参数。 KeySet不包括列名,只包含键的值。因此,您需要按表的键列顺序指定键值。看看这里引用的方法的规范:https://cloud.google.com/spanner/docs/reference/rest/v1/projects.instances.databases.sessions/commit#Delete
我不熟悉ADO.NET连接器,但即使您能够在ADO.NET API中使用列名和值的组合指定键值,最后只会将键值发送到Cloud Spanner。