VB2005 ジェネリックのリストの使い方

    Private Sub リストテスト()

        Dim a As New List(Of String)    ‘ジェネリックのリスト(文字列の例)
        Dim idx As Integer

        ‘リストに追加

        a.Add(“あ”)
        a.Add(“う”)
        a.Add(“い”)

        ‘リスト内に要素があるか調査(Containsメソッド)

        Dim str1 As String = “い”
        If a.Contains(“い”) Then
            MessageBox.Show(“い 発見”, “Containsメソッド”, MessageBoxButtons.OK)
        Else
            MessageBox.Show(“い 無し”, “Containsメソッド”, MessageBoxButtons.OK)
        End If

        ‘リスト内での要素の位置を調査(IndexOfメソッド)

        idx = a.IndexOf(“い”)
        If idx >= 0 Then
            MessageBox.Show(“い の位置=” + idx.ToString, “IndexOfメソッド”, MessageBoxButtons.OK)
        Else
            MessageBox.Show(“い 無し”, “IndexOfメソッド”, MessageBoxButtons.OK)
        End If

        ‘上記ContainsやIndexOfは要素数が大きいと遅い.
        ‘そんな時は要素数が大きくても速いBinarySearchを使う.
        ‘しかしBinarySearchはあらかじめソートされている必要がある.

        ‘リスト内での要素の位置を調査(BinarySearchメソッド)

        a.Sort() ‘ソートしないと結果がおかしくなる
        idx = a.BinarySearch(“い”)
        If idx >= 0 Then
            MessageBox.Show(“い の位置=” + idx.ToString, “BinarySearchメソッド”, MessageBoxButtons.OK)
        Else
            MessageBox.Show(“い 無し”, “BinarySearchメソッド”, MessageBoxButtons.OK)
        End If

        ‘BinarySearchその2
        ‘要素をソートしながら追加する方法
        ‘こうすると最初からソートされているのでSortメソッドを使う必要がない.

        a.Clear()

        idx = a.BinarySearch(“あ”)
        If idx < 0 Then
            idx = idx Xor -1
            a.Insert(idx, “あ”)
        End If

        idx = a.BinarySearch(“う”)
        If idx < 0 Then
            idx = idx Xor -1
            a.Insert(idx, “う”)
        End If

        idx = a.BinarySearch(“い”)
        If idx < 0 Then
            idx = idx Xor -1
            a.Insert(idx, “い”)
        End If

        idx = a.BinarySearch(“い”) ‘ソートされているので問題なし
        If idx >= 0 Then
            MessageBox.Show(“い の位置=” + idx.ToString, “BinarySearchその2”, MessageBoxButtons.OK)
        Else
            MessageBox.Show(“い 無し”, “BinarySearchその2”, MessageBoxButtons.OK)
        End If

    End Sub

VB2005 CkickOnceアプリケーションを強制的にアップデートする方法 (2方法)

1. 更新オプションで設定する方法

[プロジェクトのプロパティー] – [発行]タブの[更新…]ボタンを押す.
ダイアログで「アプリケーションの開始前に行う」を選び,
「このアプリケーションに最低限必要なバージョンを指定してください」にチェックを付け,発行するバージョン番号を入力する.

この方法は発行前に毎回バージョン番号を入力しなければならないが,必要なときだけ強制アップデートができて便利である.


2. コードでおこなう方法

下記,InstallUpdateSyncWithInfo プロシージャーをフォームのLoadイベントなどに入れる.

    Private Sub InstallUpdateSyncWithInfo()
        Dim info As Deployment.Application.UpdateCheckInfo = Nothing

        ‘ClickOnceの場合に実行
        If (Deployment.Application.ApplicationDeployment.IsNetworkDeployed) Then
            Dim AD As Deployment.Application.ApplicationDeployment = Deployment.Application.ApplicationDeployment.CurrentDeployment

            Try
                info = AD.CheckForDetailedUpdate()
            Catch dde As Deployment.Application.DeploymentDownloadException
                MessageBox.Show(“現在、新しいバージョンのアプリケーションをダウンロードできません。” + ControlChars.Lf + ControlChars.Lf + “ネットワーク接続を確認するか、後ほど実行してください。エラー: ” + dde.Message)
                Return
            Catch ioe As InvalidOperationException
                MessageBox.Show(“このアプリケーションをアップデートできません。ClickOnce アプリケーションでない可能性があります。エラー: ” + ioe.Message)
                Return
            End Try

            ‘アップデート版がある
            If (info.UpdateAvailable) Then
                Dim doUpdate As Boolean = True

                ‘必須の更新ではない場合に確認するとき
                ‘If (Not info.IsUpdateRequired) Then
                ‘    Dim dr As DialogResult = MessageBox.Show(“アップデート版があります。今すぐアップデートしますか?”, “アップデート可能”, MessageBoxButtons.OKCancel)
                ‘    If (Not System.Windows.Forms.DialogResult.OK = dr) Then
                ‘        doUpdate = False
                ‘    End If
                ‘End If

                ‘アップデート実行
                If (doUpdate) Then
                    Try
                        AD.Update()
                        MessageBox.Show(“アプリケーションがアップデートされました。再起動します。”)
                        Application.Restart()
                    Catch dde As Deployment.Application.DeploymentDownloadException
                        MessageBox.Show(“アップデートできませんでした。” + ControlChars.Lf + ControlChars.Lf + “ネットワーク接続を確認するか、後ほど実行してください。”)
                        Return
                    End Try
                End If
            End If
        End If
    End Sub

このコードを追加した1回目の更新は,元のアプリケーションにこのコードがないから強制アップデートにはならないので注意.


参考:
ClickOnceの運用を成功させる5つのポイント (@IT)

ApplicationDeployment.Update メソッド (MSDN)

VB2005 DataTableから行を抽出する方法

  Dim cn As SqlClient.SqlConnection

   Sub DataTableTest()

        Dim cmd As New SqlClient.SqlCommand(“SELECT ID, Name FROM Table1”, cn)
        Try
            cmd.CommandType = CommandType.Text
            Dim da As New SqlClient.SqlDataAdapter
            da.SelectCommand = cmd
            Dim dt As New DataTable
            dt.PrimaryKey = Nothing
            dt.Locale = System.Globalization.CultureInfo.InvariantCulture
            da.Fill(dt)

            ‘(1)Rows.Findメソッドを使用する方法 ==========
            ‘PrimaryKeyを設定する必要がある
            dt.PrimaryKey = New DataColumn() {dt.Columns(“ID”)}
            Dim row1 As DataRow = dt.Rows.Find(1)
            MessageBox.Show(row1.Item(“Name”).ToString)

            ‘(2)Selectメソッドを使用する方法 =============
            ‘PrimaryKeyは不必要だがDataRowの配列で返ってくる
            Dim row2() As DataRow = dt.Select(“ID = 1”)
            For Each row As DataRow In row2
                MessageBox.Show(row.Item(“Name”).ToString)
            Next

            ‘Selectメソッドはソートもできる
            Dim row3() As DataRow = dt.Select(“ID < 3”, “Name DESC”)
            For Each row As DataRow In row3
                MessageBox.Show(row.Item(“Name”).ToString)
            Next

            ‘絞り込み無しのソートのみもできる
            Dim row4() As DataRow = dt.Select(Nothing, “Name DESC”)
            For Each row As DataRow In row4
                MessageBox.Show(row.Item(“Name”).ToString)
            Next

        Finally
            cmd.Dispose()
        End Try

    End Sub