Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

DbCommand và SQL được tham số hóa, ORACLE so với SQL Server

Tôi đã chấp nhận câu trả lời cho câu hỏi này từ lâu, nhưng vì lý do nào đó mà câu trả lời đó không còn ở đây nữa ... Vì vậy, tôi đoán tôi cần trả lời câu hỏi của chính mình.

Những gì tôi đã làm là tạo một lớp 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;
    }

}

Tôi tạo một biến thành viên của loại ParamBuilder:

private readonly ParamBuilder m_ParamBuilder;

Sau đó, trong phương thức mà tôi sử dụng các tham số, tôi sử dụng nó như sau:

...
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. Tìm các hàng trùng lặp trong cơ sở dữ liệu

  2. Toán tử ALL VS Bất kỳ trên một truy vấn trống

  3. Nhận kết quả hàng đầu cho từng nhóm (trong Oracle)

  4. java.sql.SQLException:ORA-01438:

  5. cách thực hiện nhiều truy vấn oracle c #