/// <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(); }
public static SqlInsert ToSqlInsert(this IRow row) { if (row == null) { throw new ArgumentNullException("row"); } var insert = new SqlInsert(row.Table); insert.Set(row); if (row as IIdRow != null) { insert.IdentityColumn(row.IdField.Name); } return(insert); }
/// <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(); }
public static SqlInsert ToSqlInsert(this Row row, ISqlDialect dialect) { if (row == null) { throw new ArgumentNullException("row"); } var insert = new SqlInsert(dialect, row.Table, string.Empty); insert.Set(row); var idRow = row as IIdRow; if (idRow != null) { insert.IdentityColumn(((Field)(((IIdRow)row).IdField)).Name); } return(insert); }
/// <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(); }