Что лучший способ состоит в том, чтобы представить промежуток в SQL Server CE?

Когда вы звоните Selection.sort(list) в main, кажется, что list имеет длину 10000.

Каждый элемент по умолчанию равен нулю.

Итак, если вы прочитаете три слова, ваш список будет выглядеть следующим образом:

word1,word2,word3,null,null,null......null

Быстрый взлом, чтобы вам не нужно изменять размер массива - попробуйте сделать свой внутренний цикл в Selection::sort:

    for (int j = i + 1; j < n; j++) {
        if (a[j] == null) {
            break;
        }

        if (less(a[j], a[min]))
            min = j;
    }

Или - изменить размер массива перед обработкой.

Или - используйте ArrayList, чтобы помещать слова в массив и затем преобразовывать его в массив, если вам абсолютно необходимо использовать массив.

26
задан Mark Byers 1 November 2010 в 11:02
поделиться

3 ответа

Я бы рекомендовал использовать long для представления числа тиков . Это то, что TimeSpan использует в качестве своего внутреннего представления. Это позволяет вам легко воссоздать ваш объект с интервалом времени . Метод FromTicks () и вывод в базу данных с использованием свойства Timespan.Ticks . Наименьшей единицей времени в .NET является отметка, равная 100 наносекундам

38
ответ дан Bob King 28 November 2019 в 07:25
поделиться

CE SQL не имеет типа времени или определяемых пользователем типов, таким образом, Вашим выбором является дата и время или интервал, представляющий минуты. Если самое большое время, которое необходимо сохранить, является 23:59 = 23 * 60 + 59 = 1439 = число минут за день, запускающийся с минуты 0, smallint является самым маленьким целочисленным типом, который разместит тот диапазон.

Сопротивляйтесь искушению сохранить часы и минуты в отдельных столбцах как tinyints. Это использовало бы то же пространство как единственный smallint, но затем каждое вычисление времен потребует умножающихся часов 60 и добавляющие минуты и каждый order by потребует двух столбцов вместо одного.

Хранилище как минуты; демонстрирующийся, можно разделить минуты на часы и минуты с

select floor( absminutes / 60 ) as hours, absminutes % 60 as minutes,
from some table
order by absminutes; 

Я назвал бы столбец (столбцы) minutes, или absminutes (в течение абсолютных минут), если Вы хотите отличить минуты 1439 года через день с этих 0-59 минут через час.

Для преобразования из базы данных оценивают объекту Промежутка, используют ctor Timespan(int, int, int) как это new TimeSpan( floor(absminutes / 60 ), absminutes % 60, 0) или (лучше) ctor Timespan(long) с new Timespan( absminutes * TimeSpan.TicksPerMinute ).

Чтобы вставить или обновить базу данных от объекта Промежутка, установите absminutes на someTimespan.TotalMinutes % 1440.

1
ответ дан tpdi 28 November 2019 в 07:25
поделиться

Сохранить как varchar. Сохраните в sql, используя TimeSpan.ToString(). Читать из sql как:

TimeSpanObj = TimeSpan.Parse(fieldValue)
2
ответ дан 28 November 2019 в 07:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: