BCPコマンドでImport・Exportをする

1. はじめに

  • SQLServerの特定のテーブルからCSVファイル形式でデータを取得したい
  • SQLServerのインポート・エクスポート機能でも対応可能だがコマンド実行で一括で取得したい

2. コマンド

  • エクスポート・インポート、それぞれのバッチファイルを作成
  • csvファイル形式とする
  • バッチファイルの実行結果はログファイルに出力する。
    • 処理開始・完了メッセージ
    • SQL実行結果(登録件数)の出力

(1) エクスポート

SET logFile=c:\temp\import.log
echo エクスポート開始 > %logfile%

bcp dbo.testTB1 OUT c:\temp\testTB1.csv -c -t, -S localhost\**インスタンス名** -U sa -P **パスワード** -d testDB >> %logFile%
bcp dbo.testTB2 OUT c:\temp\testTB2.csv -c -t, -S localhost\**インスタンス名** -U sa -P **パスワード** -d testDB >> %logFile%

pause "エクスポート完了。ログ出力先:" %logfile% "" >> %logfile%
exit

(2) インポート

SET logFile=c:\temp\export.log
echo インポート開始 > %logfile%

sqlcmd -Q "TRUNCATE TABLE dbo.testTB1;" -S localhost\**インスタンス名** -U sa -P **パスワード** -d sampleDB >> %logFile%
sqlcmd -Q "TRUNCATE TABLE dbo.testTB2;" -S localhost\**インスタンス名** -U sa -P **パスワード** -d sampleDB >> %logFile%

bcp dbo.testTB1 IN c:\temp\testTB1.csv -c -t, -S localhost\**インスタンス名** -U sa -P **パスワード** -d sampleDB >> %logFile%
bcp dbo.testTB2 IN c:\temp\testTB2.csv -c -t, -S localhost\**インスタンス名** -U sa -P **パスワード** -d sampleDB >> %logFile%

pause "インポート完了。ログ出力先:" %logfile% "" >> %logfile%
exit

3. メモ

  • テーブルによってはインポート時に不要な初期値「0」?が入ったことある。
    テーブル項目の構成が初期値「0」セットされたから。アプリ側が0値の処理に対応していなかったためと思われる。
    インポート後もチェックは必要。

1つのSQLでSELECT文をまとめたい

1.やりたいこと

  • 1つ目のテーブルで必要なデータのみかき集めて、2つ目のテーブルから合致するデータを抽出したい。
  • なお1つのSQL文にすること

2.サンプル

SELECT *
FROM (SELECT *
    FROM SAMPLE
    WHERE Oomoji='A' OR Oomoji='C' ) AS S
WHERE S.A='A'

  • SAMPLEテーブル
NO Oomoji Komoji
1 A a
2 B b
3 C c
  • SAMPLEテーブルよりA、Cのみ抽出
  • FROM句にSELECT文を書いてSテーブルとする
  • SテーブルからAのみを抽出する

Webサービス参照

1.はじめに

VisualStudioの「サービス参照(Webサービス参照)」について知ったメモ

2.メモ

  • プロジェクト名-追加-サービス参照-詳細設定-Web参照の追加
  • 参照先URLを指定すると、利用可能なメソッドが表示される。名前を指定して「参照の追加」押下
    • ※1あらかじめAPI(参照先URL)は作成する必要がある(ASP.NET)。
  • プロジェクトに「Web Reference」-「指定した名前のフォルダ」が自動的に作成される。
  • 上記のWebサービスは「API」らしい?具体的なロジックは「My Project」-「設定」のURLに保管されたアプリで実行される。
  • 追加したWebサービスは参照するだけで指定したURLに対して何かをするということではないらしい。
  • 利用者(参照する側)にはインタフェース(?)のみ公開される。詳細なロジックは見ることはできない。

Clickonceのまとめ

1. はじめに

VisualStudioのClickonceで一番よくわからなかった箇所をまとめる。

2.Clickonceとは

  • アプリケーションをインターネットで配布できる

  • URLのリンクをクリックするとアプリケーションのインストールが開始する

  • インストール作成時にショートカット作成にしておくと、インストール時にデスクトップにショートカットが作成される

  • インストールすると以降、アプリケーション起動時にアプリケーションが更新されたかどうかをチェックされる(インストール作成時に設定する必要有り)

3.インストールファイル準備

  • 新規ソリューションフォルダ作成時に、Clickonceを発行するときは「My Projects」-「署名」のClickonce マニフェストに署名する」に チェックをつけて一度署名で発行する必要がある。

  • 署名について

    • 新規のときのみ必要。なので一度署名で発行していれば他端末では対応不要。
    • 署名にチェックをつけるときにテスト証明書の発行をする。証明書は一時利用なので削除してしまって良い。
    • チェックをつけて発行するとexeファイルのプロパティに「署名」タブが追加される
    • 署名ありにするとアプリケーションインストール時の「smart screen(Windows10)」が省略される。ただし証明書の準備が必要になる。
  • 証明書について

    • 証明書は「テスト証明書」「オレオレ証明書」「認証局の証明書」がある。
    • 「テスト証明書」は発行から1年の有効。有効期限が過ぎるとユーザーに警告メッセージが表示されるらしい。ただしアプリは引き続き利用はできるらしい。未検証(調べただけ)。
    • オレオレ証明書」、自分で証明書を作成する。故に有効期限も自分で決められる。以下コマンドのみ掲載する。
      • makecert -n "CN=xxx,C=JP" -e 03/31/2050 -a sha256 -cy end -eku 1.3.6.1.5.5.7.3.3 -r -sv hogehoge.pvk hogehoge.cer

      • pvk2pfx -pvk hogehoge.pvk -spc hogehoge.cer -pfx hogehoge.pfx -f -pi パスワード

    • 認証局の証明書」、正式な証明書。対象の会社から購入する。
    • 証明書いらなければ、「My Projects」-「署名」の「Clickonce マニフェストに署名する」に チェックを外す。
  • アプリ保管先URL

    • 「My Projects」-「公開」の「インストールフォルダのURL(上記と異なる場合)」にアプリケーションをインストールする先のURLを指定する。
    • http://localhost/TEST/のTESTフォルダにアプリを保管する場合「http://localhost/TEST/」を入力する。
    • 「公開フォルダーの場所(FTPサーバまたはファイルパス)」はアプリケーション出力先のフォルダを指定する。URLのパスを利用するので任意のフォルダ名で問題ない。
  • インストール画面の生成

    • 「My Projects」-「公開」ー「オプション」の配置Webページより名前を指定するとアプリ生成と一緒にインストール画面のhtmlも生成される。

NumericUpDown ブランク入力判定

  1. はじめに

    NumericUpDown項目がブランクの場合、valueプロパティだと前回入力した数値が取得されて、現在のNumericUpDownのブランクが取得できない。

    取得できる方法を調べる。

     

  2. 対応方法
    Control型に代入する。以下のとおり。
    Dim nudControl As Control = nudCount
    If nudControl.Text = "" Then
     MsgBox("ブランク!")
     Exit Sub
    End If

 

Setupファイルの作成について

  1. はじめに
    VisualStudioで開発したアプリケーションをユーザーの端末にインストールさせます。Setup.exeの作り方について調べてことをまとめます。

  2. 事前準備
    (1) VisualStudioにMicrosoft Visual Studio Installer Projects のアプリケーションを「拡張機能の管理」から追加します。
    (2) ソリューション - 追加 - 新しいプロジェクト から Setup Project を選択します。

  3. ンストールに含めるファイルを決める
    (1) Setup - View - ファイルシステムを選択します。

    f:id:mochii3:20200628203151p:plain

    (2) インストールに含めるファイルを決めます。
     イ.Application Folder (インストールフォルダの設定)
       プライマリ出力   → メインのプロジェクト
       *.dll         → メインのプロジェクトを動かすためのdll
       TEST        → インストール先フォルダ内のサブフォルダ
     ロ.Users Desktop
       メインのプロジェクトのショートカット保存先
       (インストールすると自動的にデスクトップにショートカットができる)
     ハ.Users Program Menu
       スタートメニューにメインのプロジェクトを追加する。

    f:id:mochii3:20200628203613p:plain

  4. インストールフォルダ名の設定
    (1) Default Locationにプロパティ名?が設定してあります。

    f:id:mochii3:20200628204407p:plain

    (2) Setupフォルダを選択するとそれぞれのプロパティ値を設定します。
     イ.Author    → 設定される箇所 未確認
     ロ.Manufacturer → [C:\Program Files (x86)]にできるサブフォルダ。
                発行元名称にもなる。
    f:id:mochii3:20200628205205p:plain
     ハ.ProductName → [C:\Program Files (x86)\Manufacturer]のサブフォルダ。
                アプリケーションの名前になる。
     ニ.Title     → インストール画面の左上のタイトル。

    f:id:mochii3:20200628210241p:plain

     ホ.Version → 1.0.0(初回導入時、改修ごとに1カウントアップさせる)

  5. .NET Framework も含める
    Setupのプロパティより構成、必須コンポーネントの設定をします。

    f:id:mochii3:20200628210740p:plain

  6. インストーラーの作成
    Setupプロジェクトをビルドすると「Setup.exe」と「Setup.msi」が作成されます。ユーザーはWindowsOSなので.msiを提出します。
    msiとexeの違いについて<https://aprico-media.com/posts/3926>

  7. インストーラーの実行
    .NET Frameworkがインストールされていない場合、インストール画面が表示され、インストール済であればアプリケーションインストール画面が表示されます。

  8. おわりに
    以上、調べたことのまとめです。結構、かけあしだったので端折りましたが、これで良いはず。

  9. その他(気づいたこと)
    必須コンポーネント、オフライン取込みにする場合、この前調べたとおり、プライマリキーの修正とか、所定の場所にexeファイルを保管して実行しないとインストーラー作成時エラーになります。msiファイルがtmpファイルになります。

GitHub マージ検証

1.懸念事項

複数人で開発するとき、個人ブランチを作成して、最終的にmasterブランチへマージする。
masterマージのときに先にマージした人のプログラムが削除されないか?

 

2.検証

(1) 準備
    masterブランチ、Aさんブランチ、Bさんブランチ を用意

(2)コードのマージ検証
   イ.AさんブランチのDBクラスにコメント追加
   ロ.BさんブランチのDBクラスにコード追加
   ハ.Aさんブランチ→masterへマージ OK!
   ニ.Bさんブランチ→masterへマージ コンフリクト!
   
   →結果、GitHubの操作画面で手動でマージすることなった。
    BさんブランチのDBクラスにmasterの最新を取込むかたちで操作は

    簡単だった。
    マージ画面でGitHubが自動的にコメントを入力してくれていた。

    そのコメントを削除すると、取込み対象となった。

(3)画面のマージ検証
   イ.Aさんブランチのサンプル画面にボタン追加
   ロ.BさんブランチのTestクラスにコード追加(サンプル画面あり)
   ハ.Aさんブランチ→masterへマージ OK!
   ニ.Bさんブランチ→masterへマージ OK!

   →画面はコンフリクトにならない。

 

3.結果

コードはコンフリクト機能があるためマージの心配はない。だたわかりやすいように下からコード追加とかにしたほうが良い。
画面デザインはコンフリクトされないので、相手が修正していないか確認が必要!

ほかのexeファイルの2重起動防止

ProcesのIDを利用する

  1. 考え方
    ・該当exeファイルのプロセスを取得する
    ・取得したプロセスから当該システムから起動したプロセスIDを取得する
    ・合致するIDであればエラーとする
    ・画面を閉じるときに当該システムから起動したプロセス(ID)であれば一緒に閉じる

  2. 実装

Public Class process

    //変数
    Private p As System.Diagnostics.Process
    Private pId As Integer = Nothing

    //クローズ
    Private Sub btnClose_Click(sender As Object, e As EventArgs) Handles btnClose.Click

        //当該システムで開いたメモ帳を閉じる
        If CheckProessId() Then
            p.CloseMainWindow()
            p.Close()
            p.Dispose()
        End If

        Me.Close()
    End Sub

    //プロセス
    Private Sub btnCallAnoterProgram_Click(sender As Object, e As EventArgs) Handles btnCallAnoterProgram.Click
        //Processを利用して該当のアプリが起動中かチェックする
        If CheckProessId() Then
            MsgBox("メモ帳は既に起動済です。" & vbCrLf & "メモ帳を閉じてから再度ボタンをクリックしてください。",
                   MsgBoxStyle.Exclamation,
                   "警告")
            Exit Sub
        End If

        //メモ帳の起動
        p = System.Diagnostics.Process.Start("notepad.exe")
        pId = p.Id

    End Sub

    //ProcessIDをもとに当該システムで起動したアプリかチェックする
    //True : 起動済 / Flase : 未起動
    Private Function CheckProessId() As Boolean
        CheckProessId = False

        Dim pCheck As System.Diagnostics.Process
        Dim ps As System.Diagnostics.Process() = System.Diagnostics.Process.GetProcessesByName("notepad")

        //配列から1つずつ取り出す
        For Each pCheck In ps
            If pCheck.Id = pId Then
                Return True
            End If
        Next pCheck
    End Function
End Class

開発環境準備(GitHub・VisualStudio2019)

 1. GitHub新規登録

・ググった先の情報をもとにユーザー登録。
・個人用でなくても「Private」が無料で利用できるようになった。
・Privateに新規リポジトリ作成

 2. VisualStudio2019Communityインストール

・インストexeはググって取得
・インスト時必要な機能の選択ができるようになった
・とりあえず、VSのWindowsアプリだけにした
→のちほど、追加
・インスト先がCドライブ以外が選べない!!!
→HDの容量の問題があるのでSDカードへWindowsUpdateのお引越し(やり方はググった)

 3. VS2019で新規ソリューション作成

・とりあえず、mainMenu画面だけ作成
GitHubへPushしたい!!!

 4.GitHubへPush!

・masterのURL取得
・上記2項でインスト足りなかった「Git for Windows」と「VisualStudio Git 連携?」のインスト
→アカウント名と、パスワード入力して連携完了!…肝心なソースがあげらない…

→ググったがソースのあげ方がコマンドばっかり…VisualStudioを使いたい!
・クローン先に作成済のVisualStudioのソリューションごと貼り付け
・認識された。変更よりコミット、コミットからPushした

以上

読書ログ

【はじめに】
  読んだ(読んでいる)本のログ。上から最新にする。

7.業界関連(2020年?月)
 
6.業界関連(2020年?月)
 
5.ビジネス書(2020年12月)
 
4.ビジネス書(2020年12月)
 
3.ネットワーク関連(2020年11月)
 
2.ネットワーク関連(2020年6月) 
1.ネットワーク関連(2020年1月)