sql >> データベース >  >> RDS >> Oracle

DbCommandとパラメーター化されたSQL、ORACLEとSQL Server

    私はずっと前にこの質問の答えを受け入れましたが、何らかの理由でその答えはもうここにはありません...だから私は自分の質問に答える必要があると思います。

    私がしたことは、parambuilderクラスを作成することでした:

    class ParamBuilder
    {
        private DbProviderFactory m_factory;
        private DbCommandBuilder m_builder;
        private string m_parameterMarkerFormat;
        public ParamBuilder(DbProviderFactory factory) : this(factory, null)
        {
        }
    
        public ParamBuilder(DbProviderFactory factory, DbConnection source)
        {
            m_factory = factory;
            m_builder = m_factory.CreateCommandBuilder();
            if (source != null)
            {
                using (DataTable tbl =
                    source.GetSchema(DbMetaDataCollectionNames.DataSourceInformation))
                {
                    m_parameterMarkerFormat =  
                        tbl.Rows[0][DbMetaDataColumnNames.ParameterMarkerFormat] as string;
                }
            }
            if (String.IsNullOrEmpty(m_parameterMarkerFormat))
                m_parameterMarkerFormat = "{0}";
        }
    
        public DbParameter CreateParameter(string parameterName, 
            out string parameterMarker)
        {
            DbParameter param = m_factory.CreateParameter();
            param.ParameterName =  
                (string)typeof(DbCommandBuilder).InvokeMember("GetParameterName",
                    System.Reflection.BindingFlags.Instance |
                    System.Reflection.BindingFlags.InvokeMethod |
                    System.Reflection.BindingFlags.NonPublic, null, m_builder, 
                    new object[] { parameterName });
    
            parameterMarker = 
                String.Format(System.Globalization.CultureInfo.InvariantCulture, 
                m_parameterMarkerFormat, param.ParameterName);
    
            return param;
        }
    
    }
    

    ParamBuilderタイプのメンバー変数を作成します:

    private readonly ParamBuilder m_ParamBuilder;
    

    次に、パラメーターを使用する方法では、次のように使用します。

    ...
    string paramMarker;
    DbParameter param = m_ParamBuilder.CreateParameter(destination[i].ColumnName, 
        out paramMarker);
    sql.Append(paramMarker);
    
    param.Direction = ParameterDirection.Input;
    param.Value = source[i];
    Cmd.Parameters.Add(param);
    ...
    


    1. ユーティリティ:2分で表からデータをエクスポートするためのPL/SQLプロシージャを生成

    2. 新しいテーブルにデータを要約する

    3. Laravelでこれを行う方法、サブクエリ

    4. 70kbを超える画像が一時ディレクトリにアップロードされない