2009-08-20 7 views
0

Я присоединяюсь к двум таблицам - Contact и RetailTrainingUserLevelMap в инструкции Select.«Строка ввода не была в правильном формате» при использовании SqlDataReader и метки

(Общий столбец в обоих является RetailTrainingUserLevelID целое)

ВЫБОР Contact.IntranetUserName, Contact.CompanyName, RetailTrainingUserLevelMap.RetailTrainingUserLevel

от контакта

INNER JOIN RetailTrainingUserLevelMap ПО Contact.RetailTrainingUserLevelID = RetailTrainingUserLevelMap .RetailTrainingUserLevelID

AND Contact.RetailTrainingUserLevelID = RetailTrainingUserLevelMap.RetailTrai ningUserLevelID

WHERE (Contact.IntranetUserName = @IntranetUserName)


Если я бегу это заявление через Visual Studio Query Builder (окно тест запроса) и введите значение "IntranetUserName" я получаю:

IntranetUserName:
Джон Джо

НазваниеКомпании:
Acme Inc.

RetailTrainingUserLevel:
менеджер

Это мой желаемый результат, до сих пор так хорошо.

Если я использую этот же оператор выбора в моем .cs CodeBehind используя SqlDataReader связать метки для некоторых из этих колонн, как это:

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 Int
RetailTrainingUserLevel VARCHAR (50)

Спасибо за ваше время и знания.

ответ

0

Вы уверены, что читатель ["RetailTrainingUserLevel"] не DBNull ??

возможно захотите сделать .ToString() на нем, прежде чем пытаться добавить его в другую строку.

Я бы просто сделать

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

Привет Стэн, "RetailTrainingUserLevel" установлен, чтобы не допустить нуль. Я попробовал ваше предложение кода и все еще получаю сообщение об ошибке: «Входная строка не в правильном формате». на userLevelLabel.Text + = reader ["RetailTrainingUserLevel"]. ToString(); Я смущен, почему возникает проблема. Читатель хочет получить значение RetailTrainingUserLevel, которое в таблице установлено на varchar - возможные значения - это Manager, Supervisor, Principal, которые кажутся мне струнами. Не уверен, что еще попробовать. Правильно ли настроен оператор JOIN? Спасибо за любые другие идеи, которые у вас могут быть ... – Doug