2012-04-20 2 views
5

이 질문에 대한 답변을 이미 받았으면 용서해주십시오. 방금 내 질문을 검색하는 데 시간을 보냈으며 찾을 수없는 것 같습니다.nchar을 C#의 문자열로 변환하려면 어떻게해야합니까?

어쨌든 Visual Studio 2010 및 MS SQL Server에서 작업하고 있습니다. 나는 데이터베이스를 만들었고 지금은 프론트 엔드 작업을하고 있습니다. 어쨌든, 내 검색을 통해 nchar는 C# 데이터 형식이 아니라는 것을 알았지 만, 그것은 나를 위해 문자열로 변환하지 않는 것 같습니다.

Convert.ToString(reader["SerialNum"].ToString().Trim()); 

저에게 오류가 발생하는 부분입니다. 그것은 "암시 적으로 '문자열'을 'int'로 변환 할 수 없습니다."

누구나 nchar 문제를 해결할 수있는 방법을 알고 있습니까?

미리 감사드립니다.

엘리

[편집] : 난 정말 도움이 될 것입니다 여기에 다른 것을 생각하지 않습니다하지만 그래서 여기 ... 전체 방법입니다. 값이 결과에 널 (NULL) 일 수있는 경우

private Row PopulateRow(SqlDataReader pReader) 
    { 
     Row CurrentRow = new Row(); 
     CurrentRow.sTransNum = Convert.ToInt32(reader["STransNum"].ToString().Trim()); 
     CurrentRow.serialNum = Convert.ToString(reader["SerialNum"].ToString().Trim()); 
     CurrentRow.itemTypeID = Convert.ToInt32(reader["ItemTypeID"].ToString().Trim()); 
     CurrentRow.fromLocation = Convert.ToInt32(reader["FromLocation"].ToString().Trim()); 
     CurrentRow.toLocation = Convert.ToInt32(reader["toLocation"].ToString().Trim()); 
     CurrentRow.units = Convert.ToInt32(reader["Units"].ToString().Trim()); 
     CurrentRow.serialMoveDate = Convert.ToDateTime(reader["SerialMoveDate"].ToString().Trim()); 
     CurrentRow.moveTypeID = Convert.ToInt32(reader["MoveTypeID"].ToString().Trim()); 
     CurrentKey.sTransNum = CurrentRow.sTransNum; 
     CurrentRow.CompleteState = "OK"; 
     return CurrentRow; 
    } 
+1

문자열 s = Convert.ToString (reader [ "SerialNum"]); ? –

+6

예제 코드가 오류의 소스로 나타나지 않습니다. 이 줄에는 int가 전혀 없습니다. 그게 전부인가요? 컨텍스트에 대해 더 큰 샘플을 게시 할 수 있습니까? – phoog

+0

이것은 데이터베이스 메시지처럼 보입니다. 쿼리가 int로 캐스팅하려고합니까? –

답변

1

: 맞습니다 경우

, 독자에있는 데이터의 종류에 따라, 이들 중 하나는 당신의 해결책이 될 것입니다. 값을 할당 할 변수/속성의 정의를 확인하십시오.

3

아마 reader.GetString(ordinal)

reader.GetString(reader.GetOrdinal("SerialNum")) 

을 사용해야합니다 사용 reader.IsDbNull (서수)

int ordinal = reader.GetOrdinal("SerialNum"); 
serial = reader.IsDbNull(ordinal) ? null : reader.GetString(ordinal); 
+0

오류는이 대답과 아무 관련이 없습니다. 왜 이것은 upvoted입니까? –

+0

아니야! 나는 너를 상향 화하려고 애썼다. –

0
Convert.ToString(reader["SerialNum"]) 

하지만 당신은 아마 할당하는 int 변수에. 제발 더 많은 코드.

+0

나는 그것을 시도했지만, 여전히 작동하지 않았다. 그리고 나는 그것이 정말로 도움이 될지 모르지만, 맨 위에 더 많은 코드를 추가했다. –

+0

나는 CurrentRow.serialNum이 int 타입임을 확신한다. 또한 public 필드가 아닌 속성을 사용하고 serialNum이 실제로 속성을 사용하면 적절한 규칙을 사용합니다. (이것은 당신의 문제와 관련이 없지만 좋은 습관이다.) – Stilgar

0

여기 몇 가지 문제가 있습니다.

  1. 두 번 캐스팅하고 있습니다. 필요가 없습니다.
  2. C#은 weakly typed 언어가 아니므로 변환 결과를 다른 문자열에 넣어야합니다.

그래서 다음

string strTmp = Convert.ToString(reader["SerialNum"]); 
strTmp = strTmp.Trim(); 

또는

string strTmp = reader["SerialNum"].ToString().Trim(); 

나는이 도움이 되었으면 좋겠 중 하나를 시도하십시오.

+1

네, 주조에 대해 두 번이나 화가 나지만, 그건 내 상사가하는 방식입니다. 그리고 제가 여기 새로운 사람이기 때문에 나는 단지 한 번에 한걸음 씩 따라 가다.하지만 나는이 모든 것을 다른 모든 테이블과 함께 1000 번이나 해본 적이있다. 이것은 nchar이기 때문에이 하나의 문제 만있다. 그것은 주목할 가치가있는 것입니다. 나는이 모든 일을하는 것이 올바른 방법이라고 말하지 않고 있지만 지금까지는 성공했습니다. –

+0

@HerNameIsEllie, 위의 agent-j의 대답을보십시오. SqlDataReader는 nchar를 인식하고이를 캐스팅하는 방법을 알고 있습니다. – curiousdork

0

오류의 코드 줄 전체가 있습니까? 오류는 int로 변환하려고한다는 것을 나타냅니다.

0

전체 행은 CurrentRow.serialNum = Convert.ToString (reader ....)입니다.

나는 내기 CurrentRow.serialNum은 정수입니다.당신은 int로받은 값을 할당하려고

CurrentRow.serialNum = Convert.ToInt32(reader["SerialNum"].ToString().Trim()); 
CurrentRow.serialNum = (int)reader["SerialNum"]; 
0

이것은 데이터 형식 문제가 아니지만 NULL 문제 일 수 있습니다. serialNum이 NULL인지 여부를 확인하십시오. 그렇다면 NULL 케이스를 처리 할 수있는 GetSqlString 또는 다른 코드를 사용해야 할 수도 있습니다.

관련 문제