2012-04-20 1 views
5

Простите меня, если этот вопрос уже задан и ответил. Я просто потратил некоторое время на поиск моего вопроса, и я не могу найти его.Как преобразовать nchar в строку в C#?

В любом случае, я работаю в Visual Studio 2010 и MS SQL Server. У меня есть база данных, и сейчас я просто работаю над файлами. В любом случае, через мой поиск, я видел, что nchar не является типом данных C#, но это, похоже, не преобразует его в строку для меня.

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

Это часть, которая дает мне ошибку. Это говорит: «Невозможно неявно преобразовать« string »в« int ».

Кто-нибудь знает способ обойти всю проблему nchar?

Заранее благодарен!

Ellie

[EDIT]: Так вот весь метод ... хотя я ничего другого здесь действительно поможет не думать.

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

Это похоже на сообщение базы данных. ваш запрос пытается использовать astring как 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

Ошибка не имеет ничего общего с этим ответом. Почему это поддерживается? –

+0

Не я! Я попытался упрекнуть тебя. –

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

но вы, вероятно, назначая к переменной int. Больше кода пожалуйста.

+0

Я пробовал это, все еще не работал ... И я добавил больше кода вверху, хотя я сомневаюсь, что это действительно помогает. –

+0

Я уверен, что CurrentRow.serialNum имеет тип int. Также используйте свойства, а не публичные поля, и если serialNum на самом деле является собственностью, используйте правильное соглашение. (Это не имеет ничего общего с вашей проблемой, но это хорошая практика) – Stilgar

0

Здесь несколько вещей не так.

  1. Вы бросаете дважды. Нет нужды.
  2. C# не является языком weakly typed, поэтому вы должны поместить результат преобразования в другую строку.

Так что попробуйте одно из следующих действий

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

или

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

Я надеюсь, что это помогает.

+1

Да, я тоже расстроен из-за кастинга, но так работает мой босс, и поскольку я здесь новый, мне просто нужно иногда, иногда ... но я говорю, что я делал это тысячу раз раньше со всеми другими таблицами. У этого есть только проблема с этим ОДНОМ, потому что это nchar. Это то, что стоит отметить. Я не говорю, как я делаю все это, это правильный способ сделать это, но до этого он работал. –

+0

@HerNameIsEllie, посмотрите на ответ агента-j выше. SqlDataReader понимает nchar и знает, как его отличить. – curiousdork

0

Действительно ли это полная строка кода, дающая вам ошибку? Ошибка указывает, что вы пытаетесь преобразовать в int.

0

Полная строка CurrentRow.serialNum = Convert.ToString (reader ....);

Держу пари, CurrentRow.serialNum - целое число.

Если это правильно, в зависимости от типа данных в считыватель, один из них будет ваше решение:

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

Это может быть не проблема с типом данных, а проблема с NULL. Убедитесь, что serialNum может быть NULL. Если это так, вам может потребоваться использовать GetSqlString или другой код, который может обрабатывать случай NULL.