0

우리 소프트웨어가 (고객 사이트) 터키의 Window Server 2008 R2 Foundation에 설치되었습니다 (로케일이 터키어로 설정되어 있으므로 모든 메뉴와 메시지가 터키어로 표시됩니다). 우리는 SQL 서버 2005 익스프레스를 사용하고 있습니다. 데이터베이스 정렬은 SQL_Latin1_General_CP1_CI_AI입니다 (다른 영어로 설치된 사이트에서도 마찬가지 임).터키어 Window 서버 2008 년 installtion에서 DataRow.Item() ArgumentException

우리의 코드는 간단한 쿼리와 데이터베이스를 쿼리 : select * form tableName where callid='variable' (callid 그러나 데이터베이스의 열 이름이 CallID이며, 우리의 기본 키 열 유형이 varchar(60)이다), 우리의 유형이 지정되지 않은 DataSet을 채우기 위해 SqlDataAdapter.Fill() 방법을 사용하여.

DataSet.Tables[0].Rows[0]에서 DataRow 개체를 산출합니다. 이 DataRow 객체를 다른 메소드에 전달하고 DataRow.Item (String)을 사용하여 열 값을 가져옵니다. 우리는 이러한 방식으로 값을 얻는 몇 개의 컬럼을 문제없이 가지고 있습니다. 그러나 하나 개의 특정 컬럼에 대해 우리는

ArgumentException: <column name> column does not belong to table Table 

이 열은 우리의 callid 열입니다 얻을! 데이터베이스의 열 이름을 callid 또는 CalliD로 변경하면 예외가 발생하지 않습니다. 나는 Introduce the Turkish I issue이라고 불리는이 기사를 보았고 기사 주소가 콜레 션 = TURKISH_CI_AS 일 때 그 문제를 이해했다.

무엇이 여기에 있습니까? 도움이되는 의견을 보내 주시면 감사하겠습니다.

덕분에, 일란

+0

열 이름을 *로 변경했을 때 callid '또는'CalliD' 작동 - 지금은 무엇입니까? –

+0

@JonSkeet 질문에서 언급 한 내용 - CallID –

+0

감사합니다. 왜 내가 전에 그것을 볼 수 없었는지 확신 할 수 없습니다. 나는 이것이 * 터키어 내가 문제 "- 그냥 데이터베이스 쪽이 아니야. –

답변

0

내 생각은 지역 코드 (DataSet가) 당신의 열을 찾는 경우 문제가 전혀 데이터베이스 측면에서 발생하는 것이 아니라 것입니다.

아마도 가장 간단한 해결 방법은 이름 대신 서수 값을 사용하는 것입니다. 진단을 위해 DataTable.Columns에 의해 반환 된 열 이름을 살펴보고 케이스/문화에 영향을받지 않는 방법으로 이름을 일치시키는 다양한 방법을 시도해 보는 것이 좋습니다. ordinal up-front를 모르는 경우, DataSet이 실패 할 경우 역동적 인 방식으로 찾을 수 있습니다. (

+0

당신의 추측은 실제로 정확합니다 문제는 _database_ 측면에서 발생하지 않습니다. 내가 마침내 로컬 PC에 터키어를 설치하고 그'select * from tableName'에서 언급 한 예외가 발생하지만 질의에 명시 적으로 열 이름 ('select columnA, columnB from tableNAme')을 설정하면 잘 동작합니다. –