示例#1
0
        public virtual IDbDataParameter AddDbParameter(IDbCommand command, SqlPlaceHolder ph, object value)
        {
            var prmIndex = command.Parameters.Count;
            var prm      = command.CreateParameter();

            prm.ParameterName = GetSqlParameterName(prmIndex);
            prm.Direction     = ph.ParamDirection;
            prm.Value         = value ?? DBNull.Value;
            ph.PreviewParameter?.Invoke(prm, ph);
            command.Parameters.Add(prm);
            return(prm);
        }
示例#2
0
 private string FormatAsLiteral(SqlPlaceHolder ph, object value)
 {
     if (value == null || value == DBNull.Value)
     {
         return(SqlTerms.Null.Text);
     }
     if (ph.FormatLiteral == null)
     {
         var stype = _driver.TypeRegistry.GetDbTypeDef(value.GetType());
         ph.FormatLiteral = stype.ToLiteral;
     }
     return(ph.FormatLiteral(value));
 }
示例#3
0
 public override IDbDataParameter AddDbParameter(IDbCommand command, SqlPlaceHolder ph, object value)
 {
     if (value != null && value != DBNull.Value)
     {
         var vt = value.GetType();
         //MySql does not like too precise timespan values, so we rough it to milliseconds
         if (vt == typeof(TimeSpan) || vt == typeof(TimeSpan?))
         {
             var ts = (TimeSpan)value;
             value = new TimeSpan(ts.Hours, ts.Minutes, ts.Seconds);
         }
     }
     return(base.AddDbParameter(command, ph, value));
 }
示例#4
0
        /*
         * public override string GetEmptyListLiteral(DbTypeDef elemTypeDef) {
         * var pgDbType = elemTypeDef.Name;
         * var emptyList = string.Format("SELECT CAST(NULL AS {0}) WHERE 1=0", pgDbType);
         * return emptyList;
         * }
         */

        public override IDbDataParameter AddDbParameter(IDbCommand command, SqlPlaceHolder ph, object value)
        {
            var prm = (NpgsqlParameter)base.AddDbParameter(command, ph, value);

            switch (ph)
            {
            case SqlListParamPlaceHolder lph:
                // For array parameters PG requires setting NpgsqlDbType to combination of Array and pg-dbType for element
                var pgDbType = (NpgsqlDbType)lph.ElementTypeDef.ProviderDbType;
                prm.NpgsqlDbType = NpgsqlDbType.Array | pgDbType;
                break;
            }
            return(prm);
        }
示例#5
0
        public override IDbDataParameter AddDbParameter(IDbCommand command, SqlPlaceHolder ph, object value)
        {
            var parameter = base.AddDbParameter(command, ph, value);

            // force DbType to datetime2
            switch (parameter.Direction)
            {
            case ParameterDirection.Input:
            case ParameterDirection.InputOutput:
                if (parameter.DbType == DbType.DateTime)
                {
                    parameter.DbType = DbType.DateTime2;
                }
                break;
            } //switch direction
            return(parameter);
        }
示例#6
0
        // Parameters containing lists need special setup
        private void ConfigureListParameter(IDbDataParameter prm, SqlPlaceHolder ph)
        {
            var sqlPrm = (SqlParameter)prm;

            // convert to list of SqlDataRecord
            sqlPrm.Value     = ConvertListParameterValue(sqlPrm.Value, (SqlListParamPlaceHolder)ph);
            sqlPrm.SqlDbType = SqlDbType.Structured;
            var msDriver = (MsSqlDbDriver)this.Driver;

            sqlPrm.TypeName = msDriver.SystemSchema + "." + MsSqlDbDriver.ArrayAsTableTypeName;

            /*
             * // Table-valued parameters cannot be DBNull; for empty list set it to null
             * if(sqlPrm.Value == DBNull.Value)
             * sqlPrm.Value = null;
             */
        }
示例#7
0
        private string FormatPlaceHolder(SqlPlaceHolder placeHolder, object arg)
        {
            switch (placeHolder)
            {
            case SqlColumnValuePlaceHolder colPh:
                return(FormatColumnValuePlaceHolder(colPh, (EntityRecord)arg));

            case SqlLinqParamPlaceHolder paramPh:
                return(FormatLinqPlaceHolder(paramPh, arg));

            case SqlListParamPlaceHolder listPh:
                return(FormatListPlaceHolder(listPh, arg));

            default:
                Util.Throw($"Unexpected SQL placeholder type {placeHolder.GetType()}");
                return(null);
            }
        }
示例#8
0
 private IDataParameter AddParameter(SqlPlaceHolder ph, object value)
 {
     return(_sqlDialect.AddDbParameter(_dbCommand, ph, value));
 }