Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

DbCommand dan SQL berparameter, ORACLE vs SQL Server

Saya menerima jawaban untuk pertanyaan ini sejak lama, tetapi untuk beberapa alasan jawaban itu tidak lagi ada di sini... Jadi saya rasa saya harus menjawab pertanyaan saya sendiri.

Apa yang saya lakukan adalah membuat kelas 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;
    }

}

Saya membuat variabel anggota tipe ParamBuilder:

private readonly ParamBuilder m_ParamBuilder;

Kemudian pada metode di mana saya menggunakan parameter, saya menggunakannya sebagai berikut:

...
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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara menggunakan parameter SQL dalam potongan SQL markdown R

  2. ORA-01264 dalam Siaga Fisik

  3. Kompatibilitas versi Oracle Client dan ODP.NET

  4. Konversi Unixtime ke Datetime SQL (Oracle)

  5. FROM kata kunci tidak ditemukan di tempat yang diharapkan, pemilihan teks Oracle SQL