dat保存プログラムができたところ
Forever1 = AppPath & "\File\" & Ar1(i, 7)
Forever2 = AppPath & "\File\" & Ar1(i, 7) & "\" & Ar1(i, 8)
If Not fs.folderexists(Forever1) Then
fs.createfolder(Forever1)
End If
If Not fs.folderexists(Forever2) Then
fs.createfolder(Forever2)
End If
ft = fs.createtextfile(Forever2 & "\" & Ar1(i, 8) & ".dat")
ft.write(S1)
ft.close()
ADOを使いこなせるプログラマーも.NETをやるからにはADO.NETへの移行が必要だ。
ADOはCOMコンポーネントゆえの制限があるので.NETクラスのADO.NETを使う必要があるということだ。
ADO.NETはADOとはまったく違うので習得はそれなりの手間だ。それでADOを使い続けるプログラマーも多いと思うが、
ADO.NETを2日勉強すればADO.NETの便利な部分に魅せられることだろう。
ADOに限界を感じるのはサーバーにアクセスが増えてきたときだ。ADOはシングルスレッドのCOMコンポーネントなのでアクセスの多いサーバーではマルチスレッドのADO.NETが良い。
-------------------------------
'レコード削除
Dim conn As New SqlConnection(ConnectionString)
Dim SQL As String
SQL = "Delete From Categories2 where CategoryID=@CategoryID"'←SQL文に変数を埋め込める名前付きパラメータ@〜は便利
Dim cmd As New SqlCommand(SQL, conn)
cmd.Parameters.Add("@CategoryID", T3_1.Text)'←パラメータに値をセット
conn.Open()
Dim num As Integer = cmd.ExecuteNonQuery'←numには操作されたレコードの数が返ってくる。
MSG.Text = num
conn.Close()
SQL Server,MSDEの場合はImports System.Data.SqlClient
Accessの場合はImports System.Data.OleDb
を使うが、同じマイクロソフトの製品なのに仕様がかなり違う。
Accessでは@名前付きパラメータが使用できず、?ブレースホルダを使う。
?を1コ使っている例は見つかるが、2コ以上の?を使っている例は検索しても解説ページが見つからなかったので自分で作ってみた。
2コ以上の?を使っている例は現時点ではこの解説が唯一だと自負している。
ブレースホルダ付きSQLステートメントは値をセットする順序が大事で、パラメータ名には支配されない。
SQL文に?が出てきた順にcmd.Parameters.Addで値をセットする。
OLE DBの場合は
SQL="Select _ from TABLE Where Field=" & 変数
としてブレースホルダを使わない方が良いような気もするが、
cmd.Parameters.Addはユーザに入力して欲しくない特殊文字を自動的にエスケープしてくれるのでセキュリティ的には有利だ。
とはいえ、各言語やSQLの予約語・特殊文字はそう多くは無いので自前でエスケープしてOLE DB SQL文には従来の変数代入方式でもよい。
------------------------------------
Dim conn As New OleDbConnection(接続文字列)
Dim SQL As String
SQL = "Update Categories2 Set CategoryName=?,Description=? where CategoryID=?"
Dim cmd As New OleDbCommand(SQL, conn)
cmd.Parameters.Add("CategoryName", 値)'←SQL内の?の順にパラメータをパラメータコレクションに追加
cmd.Parameters.Add("Descriotion", 値)'←
cmd.Parameters.Add("CategoryID", 値)'←
conn.Open()
Dim num As Integer = cmd.ExecuteNonQuery
conn.Close()
いままで
Array(0,0)="1"
Array(0,1)="a"
Array(1,0)="2"
Array(1,1)="b"
と配列で扱っていたものをデータセット内のテーブルとして扱えば実に扱いやすい。
ID 値
1 a
2 b
↑を並び替えるメソッドも用意されているからクイックソートやバブルソートなどのアルゴリズムを書かなくとも並び替えができてしまう。
VB6.0も好きでVB6.0の方が優れている点もかなり多いのだががこういったことを見てしまうと.NETに移行せざるを得ないのである。