2017-12-08 15 views
0

안녕 얘들 아 다른 사람이 ADO.net 커넥터가 "열에 대한 잘못된 값 : 예상 된 INT64" 방법 :ADO.net 커넥터 : 삭제 명령 반환 잘못된 열 값 : 예상 된 INT64

오류 정보 : 가. "시스템이 동작의 실행 상태에 필요한 상태가 아니기 때문에 작업이 거부되었습니다 (상태 코드 = FailedPrecondition는 상세 ="테이블 표에서 열 GeographyKey 값이 잘못 : 예상 INT64. ")"

var qry = "DELETE Table1"; 
var col = new SpannerParameterCollection(); 
col.Add("CustomerKey", SpannerDbType.Int64, 0); 
col.Add("EmailAddress", SpannerDbType.String, "[email protected]"); 
col.Add("GeographyKey", SpannerDbType.Int64, 37); 

이 하나 CustomerKey에 오류가 발생합니다 :

var qry = "DELETE Table1"; 
var col = new SpannerParameterCollection(); 
col.Add("EmailAddress", SpannerDbType.String, "[email protected]"); 
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, "[email protected]"); 

답변

0

를 포기하지 않습니다 delete mutation은 유일한 인수로 KeySet을 사용합니다. KeySet는 열 이름을 포함하지 않고 키 값만 포함합니다. 따라서 키 값을 테이블의 키 열 순서대로 지정해야합니다. 후드 아래에서 호출되는 메서드의 사양을 보려면 여기를보십시오. https://cloud.google.com/spanner/docs/reference/rest/v1/projects.instances.databases.sessions/commit#Delete

ADO.NET 커넥터에 익숙하지 않지만 열 이름 조합을 사용하여 키 값을 지정할 수있는 경우에도 및 값을 ADO.NET API에 저장하면 결국 키 값만 Cloud Spanner에 전송됩니다.

+0

세 개의 열은 KeySet의 일부입니다. 이 테이블은 PRIMARY KEY (GeographyKey, CustomerKey, EmailAddress)로 생성됩니다. 나는 왜 그것이 마지막 열이 INT64 일 때 열 순서대로 실패 할까 궁금 할뿐입니다. – Red

+0

PRIMARY KEY의 마지막 열이 STRING 열 (EmailAddress)이기 때문에 마지막 열이 INT64 인 경우 오류가 발생합니다. 문제는 삭제할 키 세트를 만들 때 코드에 열 이름을 지정하더라도 열 이름이 Google Cloud Spanner로 전송되지 않고 키 집합이 지정된 값의 순서에 따라 평가된다는 것입니다. . 즉, 기본 키 (GeographyKey, CustomerKey, EmailAddress)의 정의와 동일한 순서로 키 값을 지정해야합니다. –