Как преобразовать результат Datareader DbType. Время к объекту промежутка?

В ваших initializeGraph и insertEdge есть что-то не так. Это изменение должно сработать для вас

bool initializeGraph(TypeGraph *graph, int nv)
{
    if (nv < 0) {
        return false;
    }

    graph->numVertices = nv;
    graph->numEdges = 0;

    /* call `calloc` to avoid using for-loop to zero memory */
    graph->listAdj = calloc(nv, sizeof(TypePointer));

    return true;
}

void insertEdge(int v1, int v2, Weight weight, TypeGraph *graph)
{
    if (v1 < 0 || v1 > graph->numVertices || v2 < 0 || v2 > graph->numVertices) {
        return;
    }

    /* just insert the node at the head of the adjList */
    TypePointer pNew = malloc(sizeof(TypeEdge));

    pNew->vDest = v2;
    pNew->weight = weight;
    pNew->next = graph->listAdj[v1];
    graph->listAdj[v1] = pNew;
    graph->numEdges++;
}

Что касается typedef , пожалуйста, прочитайте Почему мы должны так часто печатать struct в C? и Linux Kernel CodingStyle document , чтобы принять собственное решение, использовать его или нет. Лично я сам избегаю использования typedef без необходимости.

6
задан Element 26 February 2009 в 19:57
поделиться

3 ответа

GetTimeSpan метод OleDbDataReader и SqlDataReader (но не более универсального интерфейса IDataReader, который DAAB's ExecuteReader возвраты). Я предполагаю что IDataReader экземпляр, который DAAB возвратила Вам, является на самом деле экземпляром SqlDataReader. Это позволяет Вам доступу GetTimeSpan метод путем кастинга IDataReader экземпляр appropiately:

using (IDataReader dr = db.ExecuteReader(command))
{
    /* ... your code ... */
    if (dr is SqlDataReader)
    {
        TimeSpan myTimeSpan = ((SqlDataReader)dr).GetTimeSpan(columnIndex)
    }
    else
    {
        throw new Exception("The DataReader is not a SqlDataReader")
    }
    /* ... your code ... */
}

Править: Если IDataReader экземпляр не является a SqlDataReader затем Вы могли бы отсутствовать provider атрибут Вашей строки подключения определяется в Вашем app.config (или web.config).

6
ответ дан 8 December 2019 в 13:49
поделиться

Вы попробовали прямой бросок как это?

TimeSpan span = (TimeSpan)reader["timeField"];

Я просто протестировал это быстро на моей машине и хорошо работаю, когда "timeField" является типом данных Времени в базе данных (SQL).

10
ответ дан 8 December 2019 в 13:49
поделиться

Каков тип.NET значения столбца? Если это - DateTime затем, можно передать значение его свойства Ticks (долго) конструктору TimeSpan. Например.

var span = new TimeSpan(colValue.Ticks);
0
ответ дан 8 December 2019 в 13:49
поделиться
Другие вопросы по тегам:

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