vb.net sqlite, как перебрать выбранные записи и передать каждую запись в качестве параметра другой функции - PullRequest
0 голосов
/ 05 июня 2010

У меня есть таблица sqlite со следующими полями:

Langauge      level       hours
German      2           50
French      3           40
English    1           60
German      1           10
English    2           50
English    3           60
German      1           20
French      2           40

Я хочу просмотреть записи на основе языка и других условий, а затем передать текущую выбранную запись другой функции. Итак, у меня есть следующая смесь фактического кода и псевдокода. Мне нужна помощь с преобразованием псевдо-кода в реальный код, пожалуйста. Мне трудно это сделать.

Вот что у меня есть:

Private sub mainp()
   Dim oslcConnection As New SQLite.SQLiteConnection
   Dim oslcCommand As SQLite.SQLiteCommand
   Dim langs() As String = {"German", "French", "English"}
   Dim i as Integer = 0
   oslcConnection.ConnectionString = "Data Source=" & My.Settings.dbFullPath & ";"
   oslcConnection.Open()
   oslcCommand = oslcConnection.CreateCommand
   Do While i <= langs.count
    If langs(i) = "German" Then
      oslcCommand.CommandText = "SELECT * FROM table WHERE language = '" & langs(i) & "';"
      For each record selected             'psudo code
         If level = 1 Then                 'psudo code
            update level to 2              'psudo code
            minorp(currentRecord)          'psudo code: calling minorp function and passing the whole record as a parameter
         End If                            'psudo code
         If level = 2 Then                 'psudo code
            update level to 3              'psudo code
            minorp(currentRecord)          'psudo code: calling minorp function and passing the whole record as a parameter
         End If                            'psudo code
      Next                                 'psudo code
    End If

    If langs(i) = "French" Then
      oslcCommand.CommandText = "SELECT * FROM table WHERE language = '" & langs(i) & "';"
      For each record selected             'psudo code
         If level = 1 Then                 'psudo code
            update level to 2              'psudo code
            minorp(currentRecord)          'psudo code: calling minorp function and passing the whole record as a parameter
         End If                            'psudo code
         If level = 2 Then                 'psudo code
            update level to 3              'psudo code
            minorp(currentRecord)          'psudo code: calling minorp function and passing the whole record as a parameter
         End If                            'psudo code
      Next                                 'psudo code
    End If
Loop 
End Sub

Большое спасибо за вашу помощь.

Ответы [ 3 ]

1 голос
/ 05 июня 2010

В базе данных есть объект DataRow, который вы можете передать своим функциям.

0 голосов
/ 07 июня 2010

Я бы предложил вам перенести эту логику в базу данных. SQL может выполнять эти проверки и обновлять данные с помощью оператора update с предложением where.

0 голосов
/ 05 июня 2010

Я бы предложил вам создать класс, например

public class LanguageCourse

   'Prob better to make these properties
   public Language as string
   public Level as integer
   public Hours as integer

   public sub new(language as string, level as integer, hours as integer)
     Language = language
     Level = level
     Hours  = hours
   end sub

end class

Ваш код выше может стать следующим:

Private sub mainp()
   Dim oslcConnection As New SQLite.SQLiteConnection
   Dim oslcCommand As SQLite.SQLiteCommand
   Dim langs() As String = {"German", "French", "English"}
   Dim i as Integer = 0
   oslcConnection.ConnectionString = "Data Source=" & My.Settings.dbFullPath & ";"
   oslcConnection.Open()
   oslcCommand = oslcConnection.CreateCommand

  'Not sure why you were looping round these like this.  It's also not a great idea to 
  'build up your sql queries by concactenating strings, better to parameteris them, but
  'seeing as how this seems to be hard coded anyway, better even like this:

      dim course as LanguageCourse

      oslcCommand.CommandText = "SELECT * FROM table WHERE language IN ("German", "French", "English");"
      For each record selected             'psudo code

         course = new LanguageCourse(record.language, record.level, record.hours)

         'This function should handle your update as you just seem to be adding one to
         'something, for certain criteria.
         minorp(course)

      Next                                 'psudo code


End Sub

Обратите внимание, что это все еще псевдокод, поскольку он не будет компилироваться :)

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