В ваших 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
без необходимости.
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).
Вы попробовали прямой бросок как это?
TimeSpan span = (TimeSpan)reader["timeField"];
Я просто протестировал это быстро на моей машине и хорошо работаю, когда "timeField" является типом данных Времени в базе данных (SQL).
Каков тип.NET значения столбца? Если это - DateTime затем, можно передать значение его свойства Ticks (долго) конструктору TimeSpan. Например.
var span = new TimeSpan(colValue.Ticks);