タイトル : Re: ADO-NETによる複数キーの存在チェック 投稿日 : 2012/06/16(Sat) 16:07 投稿者 : 魔界の仮面弁士
> **ADO(VB6.0)の場合** > rsALibraryM = New ADODB.Recordset > rsALibraryM.Open(wkstrSql, CN, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic) どうみても VB6 の構文ではないですよね。 Set 句は無いですし、Call 無しでメソッド呼び出しに括弧が使われていますし。 > ' ファイル存在チェック ファイル? > Private Function SonzaiCheck(ByRef bytValue As Byte) As String ここで、bytValue は何を意味しているのでしょうか? それもわざわざ ByRef で…。 それに、Select Case 句を使っていないのに End Select があったりと、 書き換える以前に前提条件がおかしいので、元のコードの意図を解釈しずらいです。 何より、戻り値が String 型であることの理由が読み取れませんでした。 戻り値自体を使っていないのですから、Sub で良いように思います。 Function で結果を返すなら、判定結果を Private wkSonzai As Integer 等で通知するかわりに、 戻り値を使って存在の有無を返すべきと思います。Recordset が無い場合や空の場合に、 wkSonzai の値を書き換えないという動作が必要だと、戻り値では不足するかも知れませんが。 > ADO-NETの場合はどのようになるでしょうか ADO-NET ではなく ADO.NET です。 TEXT1〜TEXT4がどこから来た値で、それぞれの型が何かもわからないので、 元のコードの意図を読み切れているか分かりませんが、たとえば データの有無をチェックするなら ''' <param name="tbl">LibraryM</param> ''' <returns>True:存在する、False:存在しない</returns> Private Function Exists(tbl As DataTable) As Boolean If tbl Is Noting Then MsgBox("ライブラリマスターがアクティブになっておりません") Return False '存在しない ElseIf tbl.Rows.Count = 0 Then MsgBox("データが一件もありません:" & KaOBJ.MsgItem) Return False '存在しない Else Dim q = From r In tbl Where r!Kubun = TEXT1 AndAlso r!Category = TEXT2 AndAlso r!keyword = TEXT3 AndAlso Trim(r!LibraryNa) = TEXT4 Return q.Any() '該当レコードがあれば True End If End Function などと書けるかと思います。 あるいは、該当データを取得することが目的ならこんな感じでしょうか。 ''' <param name="tbl">LibraryM</param> ''' <returns>該当データ</returns> Private Function Find(tbl As DataTable) As DataRow() If tbl Is Noting Then 'Throw New ArgumentNullException("ライブラリマスターがアクティブになっておりません") MsgBox("ライブラリマスターがアクティブになっておりません") Retrun Nothing ElseIf tbl.Rows.Count = 0 Then 'Throw New ArgumentOutOfRangeException("データが一件もありません" & KaOBJ.MsgItem) MsgBox("データが一件もありません。" & vbNewLine & KaOBJ.MsgItem, MsgBoxStyle.Exclamation) Return New DataRow() {} Else Dim q = From r In tbl Where r!Kubun = TEXT1 AndAlso r!Category = TEXT2 AndAlso r!keyword = TEXT3 AndAlso Trim(r!LibraryNa) = TEXT4 Return q.ToArray() End If End Function また、結果が複数件にならないとき(Kubun、Category、keyword が主キーの場合など)は、 配列で返す必要もないので、単独値として返すと良いでしょう。 Private Function Find(tbl As DataTable) As DataRow Dim q = From r In tbl Where r!Kubun = TEXT1 AndAlso r!Category = TEXT2 AndAlso r!keyword = TEXT3 AndAlso Trim(r!LibraryNa) = TEXT4 Return q.FirstOrDefault() End Function |