2009-06-29 3 views
1

이 경우 Visual Studio 디자이너는 해당 데이터베이스 열이 System.Int64로 지정되어 있어도 매개 변수를 int로 사용하는 메서드를 생성합니다.ODBC 데이터 연결을 통해 Int64 매개 변수가있는 TableAdapter 쿼리

SELECT * 
FROM my_table 
WHERE "status_id" = ? 

다시 status_id 유형의 System.Int64이다 :

는 "TableAdapter에 쿼리 구성 마법사"에 지정된 쿼리입니다. 이것은 디자이너가 생성하는 것입니다.

public virtual DataSet1.MyDataTable GetDataByStatusId(int status_id) { ... } 

매개 변수가 Int64가 아닌 이유는 무엇입니까? 이것은 Visual Studio의 버그입니까? (나는 2008 SP1을 사용하고 있습니다.) OdbcCommand 클래스를 사용하여 수동으로 끝낼 수도 있습니다.

편집 : PostgreSQL을 사용 중이며 열이 bigint 유형으로 지정됩니다.

답변

2

좋아요, 알아 냈습니다. Visual Studio는 매개 변수를 길게 (Int64) 만들 수있을만큼 똑똑해야합니다. 그러나 수동으로 설정하는 방법은 다음과 같습니다.

Visual Studio 데이터 집합 디자이너에서 쿼리 추가 마법사로 생성 된 메서드를 선택합니다 , "FillByStatusId, GetDataByStatusId (status_id)"라고하는 항목. 속성 창에서 "매개 변수"줄을 찾고 "..."을 선택하면 "DbType"을 Int64 (또는 무엇이든) 수동으로 설정할 수있게되어 내 문제가 해결됩니다.

+0

고마워요. 저 한테 많은 시간을 절약 해 줬어! +1 – ImGreg

0

데이터베이스 유형이 길습니까? int64는 MS Access (long (int64)와 동일)의 자 동 번호 유형이있는 경우 디자이너가 만듭니다 ... 또한 어떤 데이터베이스를 사용하고 있습니까?

편집 : bigint 데이터 유형을 사용하면 최대 9223372036854775807 ... 및 int32, 최대 2147483647까지 숫자를 사용할 수 있어야합니다. 즉, int64와 동일한 크기의 PostgreSQL을 사용하고 있습니다. 모든 int는 9223372036854775807까지입니다. 숫자가 항상 해당 범위 내에서 유효하기 때문에 int32가 작동합니다. 닷넷에서는 많은 수의 데이터 유형간에 암묵적으로 변환 할 수 있습니다. 예를 들어, int에 1.0을 곱하면 double이됩니다. 명시 적으로 변환하거나 변환 할 필요가 없습니다. 그러나 데이터 로크없이 다른 방향으로 캐스팅 할 수는 없습니다.

+0

데이터 유형 bigint와 함께 PostgreSQL을 사용하고 있습니다. –

+0

음, int32가 작동한다는 것을 알고 있습니다. 왜냐하면 int32에서 int64로 캐스트하면 항상 유효하지만, 여전히 int64를 매개 변수로 사용해야합니다. Visual Studio에서이를 int64로 만들어야합니다. 그러나 나는 그것을 바꾸는 방법을 알아 냈다. –