Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim 得意先CODE As String = "123-456"
Dim 得意先名 As String = String.Empty
Dim 値引率 As Double = 0
Dim rc As Boolean = get_得意先名と値引率(得意先CODE, 得意先名, 値引率)
End Sub
Private Function get_得意先名と値引率(ByVal 得意先CODE As String, ByRef 得意先名 As String, ByRef 値引率 As Double) As Boolean
'DB_access
'DB_accessが正常終了のとき
得意先名 = "xxxx" ' select 得意先名 from 得意先TBL where 得意先CODE=得意先CODE の結果を代入
値引率 = 22.2 ' select 値引率 from 値引率TBL where 得意先CODE=得意先CODE の結果を代入
Return True
'io Erroのときは return false
End Function
'
' という記述はありがちだが,推奨できません。理由として, 引数にByRef を使用している。メソッド[get_得意先名と値引率()]で違うテーブルをアクセスしている。
'スッキリさせるために
' select 得意先名 ,値引率 from 得意先TBL A,値引率TBL B where A.CODE = B.CODE で取得する.
'というのが , DBからみたスッキリする方法ですが, メソッドの引数にbyrefが残るのが不満。
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim 得意先CODE As String = "123-456"
Dim 得意先名 As String = get_得意先名(得意先CODE)
Dim 値引率 As Nullable(Of Double) = get_値引率(得意先CODE)
End Sub
Private Function get_得意先名(ByVal 得意先CODE As String) As String
Dim 得意先名 As String = "xxxx" ' select 得意先名 from 得意先TBL where 得意先CODE=得意先CODE の結果を代入
Return 得意先名
'該当なしの時は return nothing
End Function
Private Function get_値引率(ByVal 得意先CODE As String) As Nullable(Of Double)
Dim 値引率 As Nullable(Of Double) = 22.2 ' select 値引率 from 値引率TBL where 得意先CODE=得意先CODE の結果を代入
Return 値引率
'該当なしの時は return nothing
End Function
というふうに, メソッドの役割は一つにし、結果を戻り値で戻すようにしています。
DB_IOからみて冗長な点があります。
Table-Access用のクラスを作成する。
Public Class 得意先関係
'============
Private 得意先名 As String
Private 値引率 As Nullable(Of Double)
'============
Public Sub New(ByVal 得意先CODE As String)
'select 得意先名 ,値引率 from 得意先TBL A,値引率TBL B where A.CODE = B.CODE and a.CODE=得意先CODE 'を実行
得意先名 = rs("得意先名").tostring
値引率 = rs("値引率")
End Sub
'============
Public Function get_得意先名(ByVal 得意先CODE As String) As String
Return 得意先名
'該当なしの時は return nothing
End Function
'============
Public Function get_値引率(ByVal 得意先CODE As String) As Nullable(Of Double)
Return 値引率
'該当なしの時は return nothing
End Function
End Class
これを使って
Dim cls as new 得意先関係("123-456")
Dim 得意先名 As String = cls.get_得意先名()
Dim 値引率 As Nullable(Of Double) = cls.get_値引率()
私としては、これが,スッキリしていると思っています。
ソースの量はべた書きに比べて,増加するので,その面では冗長だともいえる?
この時,得意先コードが未設定のとき,nothingで戻すか, 例外を発生させるか,悩むところです。
アプリの性質をみて使い分けるんでしょうね。