Приложение отлично работает в режиме отладки, но неожиданная ошибка при выполнении после публикации - PullRequest
0 голосов
/ 24 ноября 2011

Я подал заявку на VB для школы. Я потратил на это много времени и был так счастлив, когда наконец закончил. Он отлично работает в режиме отладки.

Теперь проблема в том, что когда я публикую, устанавливаю и выполняю его, я получаю ошибки при открытии определенных форм. Что я заметил, так это то, что только формы, имеющие в своем коде «**. Datasource =», вызывают эти ошибки. (например: cbVertrekpunt.DataSource = getListofBstations())

Оригинальная функция для источника данных GridView:

Public Function getStation(ByVal station As String) As Station

        Return (From s In treinDataContext.Stations Select s Where s.naam = station).First

    End Function

Вот ошибка одной из форм: первая строка на английском: последовательность не содержит элементов

System.InvalidOperationException: Reeks bevat geen elementen
   bij System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)
   bij System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries)
   bij System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
   bij System.Data.Linq.DataQuery`1.System.Linq.IQueryProvider.Execute[S](Expression expression)
   bij System.Linq.Queryable.First[TSource](IQueryable`1 source)
   bij TreinplannerBL.TreinController.getStation(String station)
   bij TreinplannerBL.RittenbeheerderController.getEindstationMogelijkMetBeginstation(String beginstation)
   bij RitController.AankoopTicket.cbVertrekpunt_SelectedIndexChanged(Object sender, EventArgs e)
   bij System.Windows.Forms.ComboBox.OnSelectedIndexChanged(EventArgs e)
   bij System.Windows.Forms.ComboBox.set_SelectedIndex(Int32 value)
   bij RitController.AankoopTicket.AankoopTicket_Load(Object sender, EventArgs e)
   bij System.Windows.Forms.Form.OnLoad(EventArgs e)
   bij System.Windows.Forms.Form.OnCreateControl()
   bij System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   bij System.Windows.Forms.Control.CreateControl()
   bij System.Windows.Forms.Control.WmShowWindow(Message& m)
   bij System.Windows.Forms.Control.WndProc(Message& m)
   bij System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   bij System.Windows.Forms.Form.WmShowWindow(Message& m)
   bij System.Windows.Forms.Form.WndProc(Message& m)
   bij System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   bij System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   bij System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Дополнительная информация: Я уверен, что проблема заключается в том факте, что функции являются источниками данных, поэтому при открытии форм, в которых нет функций, являющихся источниками данных, я не получаю ошибку. Когда я открываю формы с ".DataSource =", я получаю ошибки, но когда я удаляю эти строки, ошибки больше не появляются

Ответы [ 2 ]

0 голосов
/ 24 ноября 2011

Вы получаете «Последовательность не содержит элементов», что означает, что это похоже на проблему с извлечением вашего набора данных (и что в вашем наборе данных нет элементов).

Внутри трассировки стека я вижу

bij System.Linq.Queryable.First [TSource] (источник IQueryable`1)
bij TreinplannerBL.TreinController.getStation (String station)

Что указывает на то, что внутри вашего getStation метода, вы используете First, и он не работает, потому что в коллекции нет элементов.

Не видя, что находится внутри этого метода, я могу только догадываться,но это будет выглядеть примерно так:

Public Function getStation(string station) As Station
    ' get someCollectionOfStations from somewhere (or perhaps already retrieved), 
    ' maybe apply a select ... where on the collection 
    Return someCollectionOfStations.First()
End Function

Это выдвигает на первый план две возможные проблемы:

  • существует проблема оценки запроса на получение станций, и они не извлекаются;
  • нет никаких станций, в этом случае First выдает исключение.Что должно произойти в этой ситуации?

К сожалению, код, который вы разместили, не соответствует исключению, которое вы опубликовали, поэтому я не могу дать дальнейших советов.

0 голосов
/ 24 ноября 2011

Да. Вам просто нужно загрузить данные LINQ в DataTable и вернуть это:

Imports System.Data.DataTableExtensions

' ...

' Example LINQ query comparing two DataTables. Use the query you need.
Dim q = From a In DataTable1.AsEnumerable(), b In DataTable2.AsEnumerable() _
                Where a!product_id = b!field_xyz _
                Select a!field_1, a!field_2, a!field_3

Dim results As New DataTable
results.Columns.Add("field_1")
results.Columns.Add("field_2")
results.Columns.Add("field_3")

For Each item As Object In q

    results.Rows.Add(item.field_1, item.field_1, item.field_1)

Next

Return results
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...