Влияет ли boolean.ToString () по-разному между .NET 2.0 и .NET 3.5 - PullRequest
0 голосов
/ 22 сентября 2010

Я унаследовал часть кода на работе, и я только что заметил довольно тривиальную, но странную небольшую причуду с ним. Так что, может быть, кто-то может спасти меня, настраивая чистую среду .NET 2.0, чтобы проверить это.

Существует таблица SQL2K5, содержащая столбец с именем IsEnabled BIT NOT NULL

Из этой таблицы есть выборка

Существует фрагмент кода на C #, который с помощью SQL Reader вызывает SPROC, просматривает строки результатов и записывает часть этой информации в файл журнала, а также выполняет другие действия.

using (SqlDataReader reader = DAL.SqlHelper.ExecuteReader(connStr, "usp_MySproc"))
{
    while (reader.Read())
    {
         //code to do stuff...

         string s = reader["IsEnabled "].ToString(); //exactly like this...

         //code to concatenate `s` with other values
         //log it all to file
    }
}

Странно то, что в некоторых старых файлах журналов это значение записывается как 1 или 0, тогда как в новых файлах журналов оно записывается как true или false

.

Итак, произошло одно из следующих событий. Это было вызвано:

  1. Кто-то меняет код
  2. Кто-то изменяет тип данных в таблице с int -> bit
  3. Кто-то изменил тип данных в sproc с int -> bit (может быть, там был приведен приведение / преобразование, которое было удалено)
  4. установка .NET 3.5 на всех наших производственных серверах несколько месяцев назад, и даты, похоже, совпадают с изменениями в файлах журналов,

В течение последнего часа я гулял с Google, ища изменения между .net 2.0 и .net 3.5, но на меня ничего не выходит.

Кто-нибудь может пролить свет на это?

1 Ответ

0 голосов
/ 22 сентября 2010

Вы можете пересобрать свой код для .NET 2.0 и запустить тест, чтобы увидеть, выводит ли база кода, которая у вас сейчас, 1/0 или true / false. Это должно дать вам ваш ответ. Кроме того, это не совсем boolean.ToString (), который вы вызываете в этом случае. Это считыватель данных, использующий сбор и приведение по умолчанию. Может случиться так, что datareader изменил способ вывода битовых полей, когда к ним вызывается string.

...