private SqlExpression ExtractParameter(SqlExpression expr) { Type clrType = expr.ClrType; if(expr.ClrType.IsValueType && !TypeSystem.IsNullableType(expr.ClrType)) { clrType = typeof(Nullable<>).MakeGenericType(expr.ClrType); } this.externals.Add(expr); SqlParameter sp = new SqlParameter(clrType, expr.SqlType, "@x" + (this.parameters.Count + 1), expr.SourceExpression); this.parameters.Add(sp); return sp; }
private SqlParameter InsertLookup(SqlValue cp) { SqlParameterInfo pi = null; if(!this.map.TryGetValue(cp, out pi)) { SqlParameter p; if(this.timeProviderType == null) { p = new SqlParameter(cp.ClrType, cp.SqlType, this.parameterizer.CreateParameterName(), cp.SourceExpression); pi = new SqlParameterInfo(p, cp.Value); } else { p = new SqlParameter(cp.ClrType, this.timeProviderType, this.parameterizer.CreateParameterName(), cp.SourceExpression); pi = new SqlParameterInfo(p, ((DateTime)cp.Value).TimeOfDay); } this.map.Add(cp, pi); this.currentParams.Add(pi); } return pi.Parameter; }
internal virtual SqlExpression VisitParameter(SqlParameter p) { return p; }
internal override SqlExpression VisitParameter(SqlParameter p) { SqlParameter n = new SqlParameter(p.ClrType, p.SqlType, p.Name, p.SourceExpression); n.Direction = p.Direction; return n; }
internal override SqlExpression VisitClientParameter(SqlClientParameter cp) { if(cp.SqlType.CanBeParameter) { SqlParameter p = new SqlParameter(cp.ClrType, cp.SqlType, this.parameterizer.CreateParameterName(), cp.SourceExpression); this.currentParams.Add(new SqlParameterInfo(p, cp.Accessor.Compile())); return p; } return cp; }
private bool RetypeOutParameter(SqlParameter node) { if(!node.SqlType.IsLargeType) { return false; } ProviderType newType = this.parameterizer.TypeProvider.GetBestLargeType(node.SqlType); if(node.SqlType != newType) { node.SetSqlType(newType); return true; } // Since we are dealing with a long out parameter that hasn't been // retyped, we need to annotate this.parameterizer.Annotations.Add( node, new CompatibilityAnnotation( Strings.MaxSizeNotSupported(node.SourceExpression), SqlServerProviderMode.Sql2000)); return false; }
internal override SqlStoredProcedureCall VisitStoredProcedureCall(SqlStoredProcedureCall spc) { this.VisitUserQuery(spc); for(int i = 0, n = spc.Function.Parameters.Count; i < n; i++) { MetaParameter mp = spc.Function.Parameters[i]; SqlParameter arg = spc.Arguments[i] as SqlParameter; if(arg != null) { arg.Direction = this.GetParameterDirection(mp); if(arg.Direction == ParameterDirection.InputOutput || arg.Direction == ParameterDirection.Output) { // Text, NText and Image parameters cannot be used as output parameters // so we retype them if necessary. RetypeOutParameter(arg); } } } // add default return value SqlParameter p = new SqlParameter(typeof(int?), this.parameterizer.TypeProvider.From(typeof(int)), "@RETURN_VALUE", spc.SourceExpression); p.Direction = Data.ParameterDirection.Output; this.currentParams.Add(new SqlParameterInfo(p)); return spc; }
internal SqlParameterInfo(SqlParameter parameter) { this.parameter = parameter; }
internal SqlParameterInfo(SqlParameter parameter, object value) { this.parameter = parameter; this.value = value; }
internal SqlParameterInfo(SqlParameter parameter, Delegate accessor) { this.parameter = parameter; this.accessor = accessor; }