中年システムエンジニアのオモチャ箱

中年システムエンジニアが初体験のブログ活動。技術情報の備忘録以外も、色々と載せていければと思います。

【スポンサーリンク】


VB.NET 小学生からでもプログラミングはできるのか!?

第 1 回 小学生からでもできる!? VB.NET プログラミング講座

ということで、いきなりプログラミング講座を開いてみました・汗。

本当に小学生からでもプログラミングはできるのか!?

 

小学校でプログラミング教育が必修化

2020 年から小学校でも、プログラミング教育が必修化されますよね。

ってことは、もう再来年から授業では導入されるわけですよ~。

なので「簡単な解説で!難しいことは棚に上げて!!」をモットーとして、不定期でプログラミング講座を投稿できればと思っています。

 

昔話を少々

中年 SE が小学生だった時は、LSI のゲーム機、携帯型のゲームウォッチファミコンなどがゲームで流行っていました。

小学生だったので、パソコンを買うことは、夢のまた夢でした。

その当時、友達の家にパソコン(PC-6001シリーズあたりかな?)があり、皆で集まってアドベンチャーゲームをやっていました。

その名も「王家の墓」!!

いや~、ゲームのタイトルが全然出なくて、30 分くらいクグっていました・笑。

興味がある方は、是非、「王家の墓」をクグってみてくださいね!

 

で、家庭用パソコンとしては MSX なんてもありましたねぇ~。

実際に、ファミコンをパソコンのように使用できる、ファミリーベーシックなんていうのも発売されていました。

ファミリーベーシックは買って、色々と遊んでいました!!

いや~、懐かしい・笑!!

 

 

プログラムを組むってどういうこと??

さてさて、プログラミングの話でしたよね・笑。

中年 SE が小学生の頃は、プログラムなんてのはなんぞや??って世界でした。

一昔前はそんな時代だったのですが、今や小学生プログラマーを育成するなんて、恐ろしいですね~・笑。

 

実際、プログラムを組むなんて聞くと難しい感じがしますが、複雑な動作をさせないのであれば、数学や物理といった知識は必要ありません!

小学生の知識だけでも、実際には組めると思っています!

中年 SE が、会社の後輩を教育する際は、プログラムはジグソーパズルを組み立てるみたいなものだよ!って教えています。

実際、プログラムを組むということは、プログラミングの文法を組み合わせることで作っていきます。

ジグソーパズルも例えますが、プラモデルを組むという例えも使いますね!

プラモデルって、組み立て方の図面を見て、パーツをコツコツと組み上げて、一つの物が完成するじゃないですか。

プログラムを組むっていうのは、まさに、プラモデルを組むことに似ていると、中年 SE は考えています。

ただ、プラモデルを組んだことがない人に例えても分かりづらいかと思い、プログラムを組むことをジグソーパズルを組み立てることに例えています。

 

 Note 

プログラムを組む=プラモデルを組み立てる

 または

プログラムを組む=ジグーソーパズルを組み立てる 

 

小学生でも、プラモデルを組み立てたり、ジグソーパズルを組み立てたりできますよね?

それと同じ感覚で、プログラミングが学べたらと思っています。

 

次回予告…かも!?

次回は、プログラムを作る際に使用するツールの一つである、Visual Studio のインストールを考えています。

流石に、ツールのインストールは、小学生一人では大変ですよね!?

そこで、お父さん、お母さん、出番ですよ!!

親子一緒に、ああでもないこーでもないとインストールしてコミュニケーションをとってみてはいかがでしょうか!!

 

こんな感じで、のんびりとプログラミング講座を不定期に投稿していきたいなぁと思っています。

興味がある方は、引き続き読んでもらえれば嬉しいです!

現役システムエンジニアの、中年 SE でした。

VB.NET String.Empty と空文字。使うのはどっち!?

VB.NET で開発をしている皆さん、文字列に空文字を設定する際に、String.Empty空文字("")のどちらを使いますか? 

 

ソースコード

Dim strTemp1 As String = String.Empty
Dim strTemp2 As String = ""

処理速度を調べてみると、たいして変わらないそうです。 

 

なので、開発チームでの方向性で決定していいのかなと思います。

 

ダメな事は、開発チーム内で String.Empty と 空文字("") を混在して使うことかな~。

 

 
文字列が空かどうか判定する場合

文字列が空かどうか判定する方法も色々ありますよね。

 

ソースコード

Dim strTemp1 As String = "Hello World!!"

If  strTemp1 = "" Then  <省略>

If  String.IsNullOrEmpty(strTemp1)  =  True  Then  <省略>

If  strTemp1.Equals("")  =  True  Then  <省略>

どれも、文字列 strTemp1 が空だったら、If 文内の処理を実行することなります。

この空かどうかの判定で使用する場合、String.Empty と空文字("")のどちらを使っても、やはり、処理速度はたいして変わらないそうです。

 

しかし、下記のように Nothing が設定されている場合は気を付ける必要があります。

 

ソースコード

Dim strTemp1 As String = Nothing

If  strTemp1 = "" Then  <省略>

If  String.IsNullOrEmpty(strTemp1)  =  True  Then  <省略>

If  strTemp1.Equals("")  =  True  Then  <省略>  ’ エラーが発生

Nothing が設定されている変数 strTemp1 に対して、Equals メソッドを使用した場合は、例外エラーが発生するので気を付けてくださいね!

 

文字列が空かどうかバイト数で判定する場合

文字列が空かどうかを判定する際、String.Empty や空文字("")のように文字列で判定するのではなく、バイト数で判定する方が処理速度は速いそうです。

 

ソースコード

Dim strTemp1 As String = String.Empty
If  strTemp1.Length() = 0 Then  <省略>

ただし、やはり変数 strTemp1 に Nothing が設定されている場合は、 例外エラーが発生するので気を付けてくださいね!

  

ソースコード

Dim strTemp1 As String = Nothing

If  strTemp1.Length() = 0 Then  <省略>  ’ エラーが発生

 

処理速度をそれ程、気にしないシステム開発であれば、開発チーム内で統一していれば問題ないと思いますが、処理速度がシビアなシステム開発の場合は気を付けてくださいね!

 

VB.NET データベース開発(SQLServer、Oracle共通化)【総集編】

VB.NET を使用して、データベース開発を全 3 回に渡り紹介してきました。

 

間に他の記事を入れてしまったので、総集編としてブックマークしてもらえると便利かと思います。 

f:id:middle-aged-se:20180420142913j:plain

 

 

 

  1. VB.NET とデータベースの接続を確立
    VB.NET データ プロバイダーを使用しての DB 接続(SQLServer、Oracle共通化) を読んでください。

  2. データ抽出(SELECT 文)の実行
    VB.NET データベースの SELECT 文を実行しよう(SQLServer、Oracle共通化)を読んでください。

  3. データ更新(INSERT 文)の実行
    VB.NET データベースの INSERT 文を実行しよう(SQLServer、Oracle共通化)を読んでください。

 

上記記事を参考にしてクラス化することにより、SQL ServerOracle の接続を共通化し、開発効率があがればと思います。

 

参考にしてもらい、開発の役に立てれば嬉しいです。

VB.NET データベースの INSERT 文を実行しよう(SQLServer、Oracle共通化)

VB.NET データ プロバイダーを使用しての DB 接続(SQLServer、Oracle共通化)で、VB.NET の開発環境を使用して、SQLServerOracle の接続方法のサンプルプログラムを紹介しました。

 

VB.NET データベースの SELECT 文を実行しよう(SQLServer、Oracle共通化)で、接続したデータベースから、データの抽出(SELECT 文の実行)の接続方法のサンプルプログラムを紹介しました。

 

今回は、INSERT 文を実行し、データの新規追加を実施したいと思います。

INSERT 文の実行も、SQLServerOracle 共通で使用できます!

尚、VB.NET データ プロバイダーを使用しての DB 接続(SQLServer、Oracle共通化)でコーディングしてあることを前提に、下記変数を使用していきますので注意してくださいね。

  • prov
  • cmd

 

 
INSERT 文の実行(SQLServerOracle通化

 

ソースコード

Dim strSql As New System.Text.StringBuilder()
Dim param As DbParameter = Nothing
Dim trn As DbTransaction = Nothing

 

'SQL文の生成
strSql.AppendLine("INSERT INTO DEPT (")
strSql.AppendLine(" DEPT_ID")
strSql.AppendLine(",PERSON")
strSql.AppendLine(") VALUES (")
strSql.AppendLine(" :DEPT_ID_STR")
strSql.AppendLine(", :PERSON_NUM")
strSql.AppendLine(")")

 

'実行するSQL文の設定
cmd.CommandText = strSql.ToString

 

'パラメーターの初期化
cmd.Parameters.Clear()

 

'変換パラメーターの設定
param = prov.CreateParameter()
param.DbType = DbType.String
param.ParameterName = "DEPT_ID_STR"
param.Value = "A100-01"
cmd.Parameters.Add(param)
'
param = prov.CreateParameter()
param.DbType = DbType.Int32
param.ParameterName = "PERSON_NUM"
param.Value = 5
cmd.Parameters.Add(param)

 

'トランザクションの開始
trn = cmd.Connection.BeginTransaction()
cmd.Transaction = trn

 

'INSERT文を実行
cmd.ExecuteNonQuery()

 

'成功した場合、トランザクションをコミット
trn.Commit()

 

''失敗した場合、トランザクションロールバック
'trn.Rollback()

 

上記ソースプログラムのSQL 文の生成」ですが、 :PERSON_NUM 、及び、:DEPT_ID_STR の『:』は、Oracle の場合の記述方法となります。

SQL Server では『@』となり、@PERSON_NUM 、及び、@DEPT_ID_STR と記述するので注意してくださいね。

 

また、データの更新ではトランザクションという概念が存在します。

原則、下記のような手順でデータの更新を実行します。

  1. トランザクションの開始
    下記を実行します。
    trn = cmd.Connection.BeginTransaction()
    cmd.Transaction = trn
  2. 更新する SQL 文の生成、及び、設定
    今回のソースコードではトランザクションの開始よりも前で、SQL 文を生成しています。
  3. データ更新を実行
    下記を実行します。
    cmd.ExecuteNonQuery()
  4. データ更新が正常に実施されたか判定後、トランザクションの終了
    4-1. データ更新が成功した場合、コミットを実行
      下記を実行します。
      trn.Commit()
    4-2. データ更新が失敗した場合、ロールバックを実行
      下記を実行します。
      trn.Rollback()

 

変換パラメーターの設定

DbParameter オブジェクトを使用することで、SQL 文を実行する際の値をパラメーターで設定できます。

パラメーターの設定方法は下記となります。

' パラメーターを設定するオブジェクトを生成
param = prov.CreateParameter()

' 変換する値のデータ型を指定
param.DbType = DbType.Int32

' 変換する値のパラメーター文字列を指定
param.ParameterName = "PERSON_NUM"

' 変換する値を指定
param.Value = 5

' 上記設定したパラメーターを追加
cmd.Parameters.Add(param)

 

簡易的なソースプログラムとなりますので、エラー処理などは記載していません。

 

このソースプログラムを元にしてクラス化することにより、SQL ServerOracle の接続を共通化し、開発効率があがればと思います。

 

参考にしてもらい、開発の役に立てれば嬉しいです。

VB.NET データベースの SELECT 文を実行しよう(SQLServer、Oracle共通化)

VB.NET データ プロバイダーを使用しての DB 接続(SQLServer、Oracle共通化)で、VB.NET の開発環境を使用して、SQLServerOracle の接続方法のサンプルプログラムを紹介しました。

 

今回は、実際に SELECT 文の実行をしたいと思います。

SELECT 文の実行も、SQLServerOracle 共通で使用できます!

尚、VB.NET データ プロバイダーを使用しての DB 接続(SQLServer、Oracle共通化)でコーディングしてあることを前提に、下記変数を使用していきますので注意してくださいね。

  • prov
  • cmd

 

 
SQL 文の実行(SQLServerOracle通化

 

ソースコード

Dim strSql As New System.Text.StringBuilder()
Dim param As DbParameter = Nothing
Dim adapter As DbDataAdapter = Nothing
Dim ds As New DataSet()

 

'SQL 文の生成
strSql.AppendLine("SELECT *")
strSql.AppendLine("FROM DEPT")
strSql.AppendLine("WHERE PERSON < :PERSON_NUM")
strSql.AppendLine("AND DEPT_ID = :DEPT_ID_STR")

 

'実行する SQL 文を設定

cmd.CommandText = strSql.ToString

 

'パラメーターの初期化
cmd.Parameters.Clear()

 

'変換パラメーターの設定
param = prov.CreateParameter()
param.DbType = DbType.Int32
param.ParameterName = "PERSON_NUM"
param.Value = 5
cmd.Parameters.Add(param)
'
param = prov.CreateParameter()
param.DbType = DbType.String
param.ParameterName = "DEPT_ID_STR"
param.Value = "A100-01"
cmd.Parameters.Add(param)

 

'アダプターの生成、及び、SQL文の発行
adapter = prov.CreateDataAdapter()
adapter.SelectCommand = cmd
adapter.Fill(ds)

 

上記ソースプログラムのSQL 文の生成」ですが、 :PERSON_NUM 、及び、:DEPT_ID_STR の『:』は、Oracle の場合の記述方法となります。

SQL Server では『@』となり、@PERSON_NUM 、及び、@DEPT_ID_STR と記述するので注意してくださいね。

 

変換パラメーターの設定

DbParameter オブジェクトを使用することで、SQL 文を実行する際の値をパラメーターで設定できます。

パラメーターの設定方法は下記となります。

' パラメーターを設定するオブジェクトを生成
param = prov.CreateParameter()

' 変換する値のデータ型を指定
param.DbType = DbType.Int32

' 変換する値のパラメーター文字列を指定
param.ParameterName = "PERSON_NUM"

' 変換する値を指定
param.Value = 5

' 上記設定したパラメーターを追加
cmd.Parameters.Add(param)

 

 簡易的なソースプログラムとなりますので、エラー処理などは記載していません。

 

このソースプログラムを元にしてクラス化することにより、SQL ServerOracle の接続を共通化し、開発効率があがればと思います。

 

参考にしてもらい、開発の役に立てれば嬉しいです。

 

次回は、 VB.NET データベースの INSERT 文を実行しよう(SQLServer、Oracle共通化)で、データベース接続後の INSERT 文の実装方法を紹介したいと思います。

VB.NET データ プロバイダーを使用しての DB 接続(SQLServer、Oracle共通化)

データ プロバイダーを使用して、SQL Server 及び Oracle に接続するための共通処理を紹介したいと思います。

 

Oracle 接続環境の注意点

 Oracle に接続する際は、下記準備が必要となります。

  1. Oracle Data Access Components (ODAC) for Windows のインストール
    使用している Visual Studio のバージョンによりインストーラーが用意されています。
    2018-04-13 現在、Oracle ホームページのこちらからダウンロードすることができます。

    f:id:middle-aged-se:20180412211127j:plain

  2. 開発プロジェクトの参照設定に、Oracle.DataAccess を追加する必要があります。

    f:id:middle-aged-se:20180412211553j:plain



 
 DB接続(SQLServerOracle通化

 

ソースコード

Dim prov As DbProviderFactory = Nothing
Dim con As DbConnection = Nothing
Dim cmd As DbCommand = Nothing

 

'False:Oracle接続、True:SQLServer接続
Dim isDbSQLServer As Boolean = False
Dim strProvider As String
Dim strConnection As String

 

'DbProviderFactoryオブジェクトの生成
If isDbSQLServer Then
    'SQLServer接続の場合
    strProvider = "System.Data.SqlClient"
    strConnection = String.Format("Server={0};Database={1};User ID={2};Password={3};", _
    "192.168.1.1", _
    "sqlDB", _
    "userid", _
    "userpw")
Else
    'Oracle接続の場合
    strProvider = "Oracle.DataAccess.Client"
    strConnection = String.Format("Data Source={0};User Id={1};Password={2};", _
    "oraDB", _
    "userid", _
    "userpw")
End If

prov = DbProviderFactories.GetFactory(strProvider)

 

'DbConnectionオブジェクトの生成、及び、オープン
con = prov.CreateConnection()
con.ConnectionString = strConnection
con.Open()

 

'DBCommandオブジェクトの生成、及び、コネクションの設定
cmd = prov.CreateCommand()
cmd.Connection = con

 

上記ソースプログラムの isDbSQLServer 変数「False」を設定すると SQL Server に接続し、「True」を設定すると Oracle に接続できるような作りとなっています。

  • SQL Server の接続文字列の設定
    Server:DB サーバー名、または、IP アドレス
    Database:接続先の DB 名
    User ID:DB 接続するユーザー ID
    Password:DB 接続するパスワード

  • Oracle の接続文字列の設定
    Data Source:tnsname.ora に設定してあるデータソース名
    User ID:DB 接続するユーザー ID
    Password:DB 接続するパスワード

 

簡易的なソースプログラムとなりますので、エラー処理などは記載していません。

 

このソースプログラムを元にしてクラス化することにより、SQL ServerOracle の接続を共通化し、開発効率があがればと思います。

 

参考にしてもらい、開発の役に立てれば嬉しいです。

 

次回は、 VB.NET データベースの SELECT 文を実行しよう(SQLServer、Oracle共通化)で、データベース接続後の SELECT 文の実装方法を紹介したいと思います。

VB.NET メモリリークによるメモリ解放の重要性【総集編】

何回かに分けて、各種クラスのメモリリークについての対策を紹介してきました。

 

使用しなくなったオブジェクトをガベージコレクションの処理対象にするには、Nothing をセットするだけではなく、リソースの解放(Dispose、Clear、Close など)をした後にNothing をセットするように実装すれば、メモリリークの対策になります。

 

特に 24 時間稼働するようなアプリケーションを構築している、システムエンジニアプログラマーの皆さん、プログラミングには気をつけましょうね!

 


総集編ということでまとめてみました。
ブックマークを付けておいてもらえると便利かもしれません。

www.ma-se.com

www.ma-se.com

www.ma-se.com