2009-08-20 3 views
0

Select 문의 Contact 및 RetailTrainingUserLevelMap 두 테이블을 조인하고 있습니다. SqlDataReader 및 레이블을 사용할 때 "입력 문자열의 형식이 올바르지 않습니다."

INNER JOIN RetailTrainingUserLevelMap ON Contact.RetailTrainingUserLevelID = RetailTrainingUserLevelMap SELECT Contact.IntranetUserName, Contact.CompanyName, RetailTrainingUserLevelMap.RetailTrainingUserLevel

연락

FROM

(모두 공통 열은 RetailTrainingUserLevelID의 INT이다) . 리테일 트레이닝 사용자 레벨 ID

및 연락처. RetailTrainingUserLevelID = RetailTrainingUserLevelMap.RetailTrai ningUserLevelID

WHERE (Contact.IntranetUserName = @IntranetUserName)


내가 비주얼 스튜디오 쿼리 빌더 (테스트 쿼리 창)을 통해이 문을 실행하고 "IntranetUserName"에 대한 값을 입력하면 내가 얻을 :

IntranetUserName :
존 조

회사 명 :
한국 전기 주식

RetailTrainingUserLevel :
관리자

이 내 원하는 출력은, 지금까지 너무 좋다.

이 같은이 컬럼의 일부에 레이블을 결합하기 위해 SqlDataReader 개체를 사용하여 코드 숨김 내 .cs이 같은 SELECT 문을 사용하는 경우 :

SqlCommand comm; 
     SqlConnection conn; 
     string intranetConnectionString = ConfigurationManager.ConnectionStrings["DataConnect"].ConnectionString; 
     conn = new SqlConnection(intranetConnectionString); 
     comm = new SqlCommand("SELECT Contact.IntranetUserName, Contact.CompanyName, RetailTrainingUserLevelMap.RetailTrainingUserLevel FROM Contact INNER JOIN RetailTrainingUserLevelMap ON Contact.RetailTrainingUserLevelID = RetailTrainingUserLevelMap.RetailTrainingUserLevelID AND Contact.RetailTrainingUserLevelID = RetailTrainingUserLevelMap.RetailTrainingUserLevelID WHERE (Contact.IntranetUserName = @IntranetUserName)", conn); 

     comm.Parameters.Add("@IntranetUserName", System.Data.SqlDbType.VarChar, 50); 
     comm.Parameters["@IntranetUserName"].Value = memberLoginName; 

     conn.Open(); 
     SqlDataReader reader = comm.ExecuteReader(); 
     while (reader.Read()) 
     { 
      memberCompanyNameLabel.Text += reader["CompanyName"]; 
      userLevelLabel.Text += reader["RetailTrainingUserLevel"]; 
     } 

     reader.Close(); 
     conn.Close(); 

나는 오류 "입력 문자열이 올바른 아니었다 얻을 체재." 여기 :
userLevelLabel.Text + = reader [ "RetailTrainingUserLevel"];

무엇을 C# 구문을 변경해야 여기서 해당 값을 올바르게 내 userLevelLabel에 바인딩 할 수 있습니까?

참고 : RetailTrainingUserLevelID이
RetailTrainingUserLevel의 VARCHAR 시간과 지식 (50)

감사를 int로.

답변

0

반드시 독자 [ "RetailTrainingUserLevel"]은 DBNull이 아니십니까 ??

은 다른 문자열에 추가하기 전에 .ToString()을 사용하려고 할 수 있습니다.

난 그냥

userLevelLabel.Text += reader["RetailTrainingUserLevel"].ToString(); 
+0

안녕 스탠은 "RetailTrainingUserLevel은"널 (null) 허용하지 설정되어 할 것입니다. 코드 제안을 시도했지만 "입력 문자열의 형식이 올바르지 않습니다."라는 오류가 계속 발생합니다. userLevelLabel.Text + = reader [ "RetailTrainingUserLevel"]. ToString(); 왜 문제가 있는지 혼란 스럽습니다. 리더는 테이블에있는 varchar로 설정된 "RetailTrainingUserLevel"값을 원합니다. 가능한 값은 관리자, 수퍼바이저, 프린시 펄이며 모든 문자열은 나처럼 보입니다. 그 밖의 무엇을 시도해야하는지 잘 모릅니다. 내 JOIN 문이 올바르게 설정되지 않았습니까? 다른 아이디어를 가져 주셔서 감사합니다 ... – Doug