Class to generate queries of the form INSERT INTO tablename (field1, field2..fieldN) VALUES (value1, value2..valueN)
Наследование: QueryWithParams, ISetFieldByStatement
Пример #1
0
 ///   Clones the query.</summary>
 /// <returns>
 ///   Clone.</returns>
 public SqlInsert Clone()
 {
     SqlInsert clone = new SqlInsert(tableName);
     clone.nameValuePairs.AddRange(this.nameValuePairs);
     CloneParams(clone);
     clone.cachedQuery = this.cachedQuery;
     return clone;
 }
Пример #2
0
 /// <summary>
 ///   <see cref="SqlInsert"/> nesnesinin içerdiği sorguyu bağlantı üzerinde çalıştırır</summary>
 /// <remarks>
 ///   <p>Bu bir extension metodu olduğundan direk query.Execute(connection) şeklinde de
 ///   çalıştırılabilir.</p></remarks>
 /// <param name="connection">
 ///   Sorgunun çalıştırılacağı bağlantı. Gerekirse otomatik olarak açılır.</param>
 /// <param name="query">
 ///   Sorguyu içeren <see cref="SqlInsert"/> nesnesi.</param>
 /// <param name="param">Parameter dictionary</param>
 public static void Execute(this SqlInsert query, IDbConnection connection, Dictionary param)
 {
     ExecuteNonQuery(connection, query.ToString(), param);
 }
Пример #3
0
 /// <summary>
 ///   <see cref="SqlInsert"/> nesnesinin içerdiği sorguyu bağlantı üzerinde çalıştırır</summary>
 /// <remarks>
 ///   <p>Bu bir extension metodu olduğundan direk query.Execute(connection) şeklinde de
 ///   çalıştırılabilir.</p></remarks>
 /// <param name="connection">
 ///   Sorgunun çalıştırılacağı bağlantı. Gerekirse otomatik olarak açılır.</param>
 /// <param name="query">
 ///   Sorguyu içeren <see cref="SqlInsert"/> nesnesi.</param>
 public static void Execute(this SqlInsert query, IDbConnection connection)
 {
     ExecuteNonQuery(connection, query.ToString(), query.Params);
 }
Пример #4
0
 public void Add(SqlInsert statement)
 {
     AddCommandWithParameters(statement.ToString(), statement.Params);
 }
Пример #5
0
        /// <summary>
        ///   <see cref="SqlInsert"/> nesnesinin içerdiği sorguyu bağlantı üzerinde çalıştırır ve
        ///   istenirse eklenen kaydın IDENTITY alanının değerini döndürür.</summary>
        /// <remarks>
        ///   <p>Bu bir extension metodu olduğundan direk query.Execute(connection, true) şeklinde de
        ///   çalıştırılabilir.</p></remarks>
        /// <param name="query">
        ///   Sorguyu içeren <see cref="SqlInsert"/> nesnesi.</param>
        /// <param name="connection">
        ///   Sorgunun çalıştırılacağı bağlantı. Gerekirse otomatik olarak açılır.</param>
        /// <returns>
        ///   Identity value of inserted record.</returns>
        public static Int64?ExecuteAndGetID(this SqlInsert query, IDbConnection connection)
        {
            string queryText = query.ToString();
            var    dialect   = connection.GetDialect();

            if (dialect.UseReturningIdentity || dialect.UseReturningIntoVar)
            {
                string identityColumn = query.IdentityColumn();
                if (identityColumn == null)
                {
                    throw new ArgumentNullException("query.IdentityColumn");
                }

                queryText += " RETURNING " + identityColumn;

                if (dialect.UseReturningIntoVar)
                {
                    queryText += " INTO " + dialect.ParameterPrefix + identityColumn;
                }

                using (var command = NewCommand(connection, queryText, query.Params))
                {
                    var param = command.CreateParameter();
                    param.Direction     = dialect.UseReturningIntoVar ? ParameterDirection.ReturnValue : ParameterDirection.Output;
                    param.ParameterName = identityColumn;
                    param.DbType        = DbType.Int64;
                    command.Parameters.Add(param);
                    ExecuteNonQuery(command);
                    return(Convert.ToInt64(param.Value));
                }
            }

            if (dialect.UseScopeIdentity)
            {
                var scopeIdentityExpression = dialect.ScopeIdentityExpression;

                queryText += ";\nSELECT " + scopeIdentityExpression + " AS IDCOLUMNVALUE";

                using (IDataReader reader = ExecuteReader(connection, queryText, query.Params))
                {
                    if (reader.Read() &&
                        !reader.IsDBNull(0))
                    {
                        return(Convert.ToInt64(reader.GetValue(0)));
                    }
                    return(null);
                }
            }

            if (dialect.UseSequence)
            {
                var   selectSequenceSQL = string.Format(dialect.SelectSequenceExpression, $"{query.TableName}_GEN");
                Int64?seqValue          = null;

                using (IDataReader reader = ExecuteReader(connection, selectSequenceSQL))
                {
                    if (reader.Read() && !reader.IsDBNull(0))
                    {
                        seqValue = Convert.ToInt64(reader.GetValue(0));
                    }
                }

                if (seqValue.HasValue)
                {
                    query.Set(query.IdentityColumn(), seqValue.Value);

                    using (var command = NewCommand(connection, query.ToString(), query.Params))
                    {
                        ExecuteNonQuery(command);
                    }
                }

                return(seqValue);
            }

            throw new NotImplementedException();
        }