示例#1
0
        /// <summary>
        /// Initializes the parameters.
        /// </summary>
        /// <param name="parameters"></param>
        private void InitializeParameters(object[] parameters)
        {
            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }

            // use...
            object[] useParameters = new object[parameters.Length];

            // walk...
            for (int index = 0; index < parameters.Length; index++)
            {
                // convert it?
                if (parameters[index] is SqlStatementParameter)
                {
                    this.Parameters.Add((SqlStatementParameter)parameters[index]);
                }
                else
                {
                    DbType dbType = DbType.String;

                    // mbr - 27-10-2005 - handled dbnull.
                    useParameters[index] = parameters[index];
                    if (useParameters[index] == null)
                    {
                        useParameters[index] = DBNull.Value;
                    }

                    if (!(useParameters[index] is DBNull))
                    {
                        if (useParameters[index] is DataTable)
                        {
                            dbType = ConversionHelper.GetDBTypeForClrType(((DataTable)useParameters[index]).Columns[0].DataType);
                        }
                        else
                        {
                            dbType = ConversionHelper.GetDBTypeForClrType(useParameters[index].GetType());
                        }
                    }

                    // mbr - 27-10-2005 - added debugging...
                    string name = "p" + index.ToString(Cultures.System);
                    try
                    {
                        this.Parameters.Add(new SqlStatementParameter(name, dbType, useParameters[index]));
                    }
                    catch (Exception ex)
                    {
                        throw new InvalidOperationException(string.Format("Failed to initialize parameter '{0}'.", name), ex);
                    }
                }
            }
        }
示例#2
0
        protected object AddRow(NativeName name, string[] names, params object[] values)
        {
            if (names == null)
            {
                throw new ArgumentNullException("names");
            }
            if (names.Length == 0)
            {
                throw new ArgumentOutOfRangeException("'names' is zero-length.");
            }
            if (values == null)
            {
                throw new ArgumentNullException("values");
            }
            if (names.Length != values.Length)
            {
                throw new InvalidOperationException(string.Format("Length mismatch for 'names' and 'values': {0} cf {1}.", names.Length, values.Length));
            }

            // create...
            SqlStatement sql = new SqlStatement();

            // builder...
            StringBuilder builder = new StringBuilder();

            builder.Append("insert into ");
            builder.Append(sql.Dialect.FormatTableName(name));
            builder.Append(" (");
            for (int index = 0; index < names.Length; index++)
            {
                if (index > 0)
                {
                    builder.Append(", ");
                }
                builder.Append(sql.Dialect.FormatColumnName(names[index]));
            }
            builder.Append(") values (");
            for (int index = 0; index < values.Length; index++)
            {
                if (index > 0)
                {
                    builder.Append(", ");
                }

                // value...
                object value = values[index];
                if (value == null || (value is DateTime && (DateTime)value == DateTime.MinValue))
                {
                    value = DBNull.Value;
                }

                // get it...
                DbType dbType = DbType.String;
                if (!(value is DBNull))
                {
                    dbType = ConversionHelper.GetDBTypeForClrType(value.GetType());
                }

                // value...
                if (value is DBNull)
                {
                    builder.Append("null");
                }
                else
                {
                    // get and add...
                    string paramName = sql.Parameters.GetUniqueParameterName();
                    builder.Append(sql.Dialect.FormatVariableNameForQueryText(paramName));
                    sql.Parameters.Add(paramName, dbType, value);
                }
            }
            builder.Append(")");
            builder.Append(sql.Dialect.StatementSeparator);

            // return...
            builder.Append("select ");
            builder.Append(sql.Dialect.LastInsertedIdVariableName);
            builder.Append(sql.Dialect.StatementSeparator);

            // run...
            sql.CommandText = builder.ToString();
            return(Database.ExecuteScalar(sql));
        }
示例#3
0
 public static void AddValueList <T>(this ISqlStatementArrayBuilder sql, StringBuilder builder, IEnumerable <T> values, ArrayParameterType type)
 {
     sql.AddValueList(builder, values, ConversionHelper.GetDBTypeForClrType(typeof(T)), type);
 }