Data Reader обрезает начальные нули

У меня есть строка, исходящая из хранимой процедуры, выглядит как «001234567».

sqlCommand = new SqlCommand("csp_Bbp_OBN_GetBasePageList", BBConnection);
sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;

 sqlCommand.Connection.Open();

// Run the SQL statement, and then get the returned rows to the DataReader.
accReader = sqlCommand.ExecuteReader();

 while (accReader.Read())
{    
      BasePage basePage = new BasePage();
      basePage.GroupNum= accReader.GetValue(0).ToString().Trim();
      basePageList.Add(basePage);
      accReader.Close();
      accReader.Dispose();
}
return basePageList;

В моем случае из хранимой процедуры я возвращаю varchar, после выполнения и чтения я получаю значение basePage.GrouNum, которое является строкой. Итак, я не вижу, где он обрезает начальные нули.

Пример: GroupNumber в таблице: "001234567" BasePage.GroupNum после чтения из DataReader: "1234567"

Но я не хочу, чтобы ведущие нули обрезались. Может ли кто-нибудь помочь мне, как решить эту проблему?


person SKumar    schedule 13.01.2011    source источник
comment
Не плохо ли закрыть ридер внутри цикла?   -  person R. Martinho Fernandes    schedule 13.01.2011
comment
Ничто в C# не указывает на то, что начальные нули будут обрезаны. Я предполагаю, что проблема в хранимой процедуре. Можете ли вы опубликовать процесс? Также опубликуйте результаты EXEC csp_Bbp_OBN_GetBasePageList из SQL Mgmt Studio. Спасибо.   -  person Chris Gessler    schedule 13.01.2011


Ответы (3)


Вы можете преобразовать его в целое число, а затем отформатировать выходящую строку:

basePage.GroupNum = Convert.ToInt32(accReader.GetValue(0)).ToString("000000000")

Использование 0 в качестве спецификаторов формата должно соответствующим образом дополнить результирующую строку.

person Joel Etherton    schedule 13.01.2011
comment
+1 Это, пожалуй, единственное решение, если вы не можете изменить хранимую процедуру. - person Andomar; 13.01.2011

Если у вас есть доступ к хранимой процедуре, убедитесь, что она возвращает строку. Так:

select GroupNumber

вместо, например:

select cast(GroupNumber as int) as GroupNumber
person Andomar    schedule 13.01.2011

Что будет, если вместо

GetValue(0).ToString()

ты используешь

GetString(0)

?

Еще одна вещь — возьмите за привычку заключать такие вещи, как команды и средства чтения, в с помощью инструкций. Вы можете избежать закрытия и удаления вещей и быть уверенным, что даже если ваш код выдаст ошибку, вы ничего не оставите.

person n8wrl    schedule 13.01.2011
comment
Если поле отправляется как число, начальные нули на сервере теряются. Так что это не поможет. - person Andomar; 13.01.2011
comment
ОП говорит, что он возвращает varchar из sproc. - person n8wrl; 13.01.2011
comment
Поле отправляется как varchar, а не как число. Я даже выполнил его, чтобы увидеть результаты, оно имеет начальные нули после выполнения сохраненного процесса. Итак, я сомневаюсь, что Ридер делает что-то не так. - person SKumar; 13.01.2011