/// <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 " + SqlSyntax.AutoBracket(identityColumn); if (dialect.UseReturningIntoVar) { queryText = "DECLARE\r\n INSERTED__VALUE NUMBER(18);\r\nBEGIN\r\n" + queryText + " INTO INSERTED__VALUE; DBMS_OUTPUT.PUT_LINE(INSERTED__VALUE);\r\nEND;"; } using (var command = NewCommand(connection, queryText, query.Params)) { var param = command.CreateParameter(); param.Direction = dialect.UseReturningIntoVar ? ParameterDirection.ReturnValue : ParameterDirection.Output; param.ParameterName = dialect.UseReturningIntoVar ? "INSERTED__VALUE" : 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); } } throw new NotImplementedException(); }
/// <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> /// <paramref name="returnIdentity"/> true ise eklenen kaydın IDENTITY değeri, değilse 1.</returns> public static Int64?ExecuteAndGetID(this SqlInsert query, IDbConnection connection) { string queryText = query.ToString(); if (((IQueryWithParams)query).Dialect.UseReturningIdentity()) { string identityColumn = query.IdentityColumn(); if (identityColumn == null) { throw new ArgumentNullException("query.IdentityColumn"); } queryText += " RETURNING " + identityColumn; using (var command = NewCommand(connection, queryText, query.Params)) { var param = command.CreateParameter(); param.Direction = ParameterDirection.Output; param.ParameterName = identityColumn; param.DbType = DbType.Int64; command.Parameters.Add(param); ExecuteNonQuery(command); return(Convert.ToInt64(param.Value)); } } if (((IQueryWithParams)query).Dialect.UseScopeIdentity()) { var scopeIdentityExpression = ((IQueryWithParams)query).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); } } throw new NotImplementedException(); }
/// <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); }
/// <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); }
public void Add(SqlInsert statement) { AddCommandWithParameters(statement.ToString(), statement.Params); }
/// <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(); }