スピード重視の製造が必要で、でもビジネスロジック内でSQL書きたくないからめっちゃ簡略的なSQL生成クラス 作った。
リソースからSQLファイル取ってきて、?部分をパラメータ置換するの。
全部文字列だから、シングルクォーテーションとかも設定しなきゃだけど。
Public Class SqlCreator Dim pSql As String Dim pParams As Dictionary(Of Integer, String) = New Dictionary(Of Integer, String) Const PARAMETER_LITERAL_CHARACTER As String = ":?" ''' <summary> ''' SQL実行準備 ''' </summary> ''' <param name="Sql"></param> ''' <param name="Where"></param> ''' <returns></returns> ''' <remarks>リソースファイルからSQLを取得し、実行準備を行う。</remarks> Public Function Prepare(ByVal Sql As String, Optional ByVal Where As List(Of String) = Nothing) As SqlCreator 'SQLの取得 pSql = My.Resources.Sql.ResourceManager.GetObject(Sql).ToString() 'Whereの結合 If Where Is Nothing Then Return Me End If For Each i As String In Where AddWhere(i) Next Return Me End Function ''' <summary> ''' 抽出条件追加処理 ''' </summary> ''' <param name="Where"></param> ''' <returns></returns> ''' <remarks>SQL文に、抽出条件を追加する。</remarks> Public Function AddWhere(ByVal Where As String) As SqlCreator 'Whereの結合 pSql = pSql & My.Resources.Sql.ResourceManager.GetObject(Where).ToString() Return Me End Function ''' <summary> ''' パラメータ追加処理 ''' </summary> ''' <param name="Parameter"></param> ''' <returns></returns> ''' <remarks>SQLのパラメータを追加する。</remarks> Public Function Add(ByVal Parameter As String) As SqlCreator pParams.Add(pParams.Count, Parameter) Return Me End Function ''' <summary> ''' パラメータ置換処理 ''' </summary> ''' <param name="Parameter"></param> ''' <returns></returns> ''' <remarks>SQLのパラメータを置換する。</remarks> Public Function Replace(ByVal Index As Integer, ByVal Parameter As String) As SqlCreator If pParams.ContainsKey(Index) Then pParams(Index) = Parameter End If Return Me End Function ''' <summary> ''' パラメータ削除処理 ''' </summary> ''' <param name="index"></param> ''' <returns></returns> ''' <remarks>対象インデックスのパラメータを削除する。</remarks> Public Function Remove(ByVal Index As Integer) As SqlCreator pParams.Remove(Index) Return Me End Function ''' <summary> ''' パラメータクリア処理 ''' </summary> ''' <returns></returns> ''' <remarks>パラメータを全て削除する。</remarks> Public Function Clear() As SqlCreator pParams.Clear() Return Me End Function ''' <summary> ''' SQL取得処理 ''' </summary> ''' <returns></returns> ''' <remarks>パラメータが埋め込まれたSQLを取得する。</remarks> Public Function GetQuery() As String Dim sql As String sql = EmbedQuery() Return sql End Function ''' <summary> ''' 設定SQL取得処理 ''' </summary> ''' <value></value> ''' <returns></returns> ''' <remarks>設定済みのSQLを取得する。</remarks> Public ReadOnly Property Sql() As String Get Return pSql End Get End Property ''' <summary> ''' 設定パラメータ取得処理 ''' </summary> ''' <value></value> ''' <returns></returns> ''' <remarks>設定済みのパラメータ群を取得する。</remarks> Public ReadOnly Property Params() As Dictionary(Of Integer, String) Get Return pParams End Get End Property ''' <summary> ''' パラメータ埋め込み処理 ''' </summary> ''' <returns></returns> ''' <remarks>SQLにパラメータを埋め込む。</remarks> Private Function EmbedQuery() As String Dim sql As String Dim pos As Integer ' ?をパラメータに置換する sql = pSql For Each i As KeyValuePair(Of Integer, String) In pParams pos = sql.IndexOf(PARAMETER_LITERAL_CHARACTER) If pos > 0 Then sql = Left(sql, pos) & i.Value & Mid(sql, pos + PARAMETER_LITERAL_CHARACTER.Length + 1) End If Next Return sql End Function End Class