BCPコマンドでImport・Exportをする
1. はじめに
2. コマンド
(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.メモ
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 ブランク入力判定
- はじめに
NumericUpDown項目がブランクの場合、valueプロパティだと前回入力した数値が取得されて、現在のNumericUpDownのブランクが取得できない。
取得できる方法を調べる。
- 対応方法
Control型に代入する。以下のとおり。Dim nudControl As Control = nudCount
If nudControl.Text = "" Then
MsgBox("ブランク!")
Exit Sub
End If
Setupファイルの作成について
- はじめに
VisualStudioで開発したアプリケーションをユーザーの端末にインストールさせます。Setup.exeの作り方について調べてことをまとめます。 - 事前準備
(1) VisualStudioにMicrosoft Visual Studio Installer Projects のアプリケーションを「拡張機能の管理」から追加します。
(2) ソリューション - 追加 - 新しいプロジェクト から Setup Project を選択します。 - インストールに含めるファイルを決める
(1) Setup - View - ファイルシステムを選択します。
(2) インストールに含めるファイルを決めます。
イ.Application Folder (インストールフォルダの設定)
プライマリ出力 → メインのプロジェクト
*.dll → メインのプロジェクトを動かすためのdll
TEST → インストール先フォルダ内のサブフォルダ
ロ.Users Desktop
メインのプロジェクトのショートカット保存先
(インストールすると自動的にデスクトップにショートカットができる)
ハ.Users Program Menu
スタートメニューにメインのプロジェクトを追加する。
- インストールフォルダ名の設定
(1) Default Locationにプロパティ名?が設定してあります。
(2) Setupフォルダを選択するとそれぞれのプロパティ値を設定します。
イ.Author → 設定される箇所 未確認
ロ.Manufacturer → [C:\Program Files (x86)]にできるサブフォルダ。
発行元名称にもなる。
ハ.ProductName → [C:\Program Files (x86)\Manufacturer]のサブフォルダ。
アプリケーションの名前になる。
ニ.Title → インストール画面の左上のタイトル。
ホ.Version → 1.0.0(初回導入時、改修ごとに1カウントアップさせる) - .NET Framework も含める
Setupのプロパティより構成、必須コンポーネントの設定をします。
- インストーラーの作成
Setupプロジェクトをビルドすると「Setup.exe」と「Setup.msi」が作成されます。ユーザーはWindowsOSなので.msiを提出します。
※msiとexeの違いについて<https://aprico-media.com/posts/3926> - インストーラーの実行
.NET Frameworkがインストールされていない場合、インストール画面が表示され、インストール済であればアプリケーションインストール画面が表示されます。 - おわりに
以上、調べたことのまとめです。結構、かけあしだったので端折りましたが、これで良いはず。 - その他(気づいたこと)
必須コンポーネント、オフライン取込みにする場合、この前調べたとおり、プライマリキーの修正とか、所定の場所に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を利用する
考え方
・該当exeファイルのプロセスを取得する
・取得したプロセスから当該システムから起動したプロセスIDを取得する
・合致するIDであればエラーとする
・画面を閉じるときに当該システムから起動したプロセス(ID)であれば一緒に閉じる実装
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した
以上