///// <summary> ///// Copies a BLOB value to a stream. ///// </summary> ///// <param name="field"></param> ///// <param name="outStream"></param> //public override void CopyStreamToBlobValue(EntityField field, object[] keyValues, Stream inStream) //{ // if(field == null) // throw new ArgumentNullException("field"); // if(keyValues == null) // throw new ArgumentNullException("keyValues"); // if(keyValues.Length == 0) // throw new ArgumentOutOfRangeException("'keyValues' is zero-length."); // if(inStream == null) // throw new ArgumentNullException("inStream"); // // fields... // EntityType entityType = field.EntityType; // if(entityType == null) // throw new InvalidOperationException("entityType is null."); // // ensure... // this.EnsureConnectivity(); // // begin,... // this.BeginTransaction(); // IDbCommand pointerCommand = null; // IDbCommand updateCommand = null; // try // { // // firstly, reset... // this.ResetBlobField(entityType, field, keyValues); // // statement... // SqlStatement statement = new SqlStatement(this.Dialect); // // secondly, get a test pointer... // const string pointerParamName = "pointer"; // StringBuilder builder = new StringBuilder(); // builder.Append(this.Dialect.SelectKeyword); // builder.Append(" "); // builder.Append(this.Dialect.FormatVariableNameForQueryText(pointerParamName)); // builder.Append("="); // builder.Append("TEXTPTR("); // builder.Append(this.Dialect.FormatColumnName(field.NativeName.Name)); // builder.Append(")"); // this.AppendFromAndKeyValues(statement, builder, entityType, keyValues); // statement.CommandText = builder.ToString(); // // create... // pointerCommand = this.CreateCommandxxx(statement); // if(pointerCommand == null) // throw new InvalidOperationException("pointerCommand is null."); // // add an addition argument... // // mbr - 28-11-2005 - this needs to be moved to SqlServerConnection. // SqlParameter pointerParam = (SqlParameter)pointerCommand.CreateParameter(); // pointerCommand.Parameters.Add(pointerParam); // pointerParam.ParameterName = "@" + pointerParamName; // pointerParam.DbType = DbType.Binary; // pointerParam.Direction = ParameterDirection.Output; // pointerParam.Size = 16; // // run that... // pointerCommand.ExecuteNonQuery(); // // get the pointer... // byte[] pointer = (byte[])pointerParam.Value; // if(pointer == null) // throw new InvalidOperationException("'pointer' is null."); // if(pointer.Length == 0) // throw new InvalidOperationException("'pointer' is zero-length."); // // secondly, we need to make mutliple calls to UPDATE text... // // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconconservingresourceswhenwritingblobvaluestosqlserver.asp // updateCommand = this.CreateCommandxxx(); // if(updateCommand == null) // throw new InvalidOperationException("updateCommand is null."); // updateCommand.CommandText = string.Format("UPDATETEXT {0}.{1} {2} {3} 0 {4}", this.Dialect.FormatTableName(entityType.NativeName.Name), // this.Dialect.FormatColumnName(field.NativeName.Name), this.Dialect.FormatVariableNameForQueryText(pointerParamName), this.Dialect.FormatVariableNameForQueryText("Offset"), // this.Dialect.FormatVariableNameForQueryText("Bytes")); // // create a buffer... // const int bufLen = 10240; // byte[] buf = new byte[bufLen]; // // set the pointer... // pointerParam = (SqlParameter)updateCommand.CreateParameter(); // updateCommand.Parameters.Add(pointerParam); // pointerParam.ParameterName = "@" + pointerParamName; // pointerParam.DbType = DbType.Binary; // pointerParam.Value = pointer; // // bytes... // IDataParameter bytesParam = updateCommand.CreateParameter(); // updateCommand.Parameters.Add(bytesParam); // bytesParam.ParameterName = "@Bytes"; // bytesParam.DbType = DbType.Binary; // // offset... // IDataParameter offsetParam = updateCommand.CreateParameter(); // updateCommand.Parameters.Add(offsetParam); // offsetParam.ParameterName = "@Offset"; // offsetParam.DbType = DbType.Int32; // // while... // int offset= 0; // while(true) // { // int read = inStream.Read(buf, 0, bufLen); // if(read == 0) // break; // // update... // offsetParam.Value = offset; // bytesParam.Value = buf; // // run it... // updateCommand.ExecuteNonQuery(); // // next... // offset += read; // } // // commit... // this.Commit(); // } // catch(Exception ex) // { // // roll... // this.Rollback(); // // throw... // throw new InvalidOperationException("Failed to update database BLOB.", ex); // } // finally // { // // mbr - 2014-11-30 - caching means we never dispose commands per usage... // //if(pointerCommand != null) // // pointerCommand.Dispose(); // //if(updateCommand != null) // // updateCommand.Dispose(); // } //} ///// <summary> ///// Resets the given BLOB field. ///// </summary> ///// <param name="entityType"></param> ///// <param name="field"></param> ///// <param name="keyValues"></param> //private void ResetBlobField(EntityType entityType, EntityField field, object[] keyValues) //{ // if(entityType == null) // throw new ArgumentNullException("entityType"); // if(field == null) // throw new ArgumentNullException("field"); // if(keyValues == null) // throw new ArgumentNullException("keyValues"); // if(keyValues.Length == 0) // throw new ArgumentOutOfRangeException("'keyValues' is zero-length."); // // create... // SqlStatement statement = new SqlStatement(this.Dialect); // // first of all, set it to be a zero length field... // StringBuilder builder = new StringBuilder(); // builder.Append(this.Dialect.UpdateKeyword); // builder.Append(" "); // builder.Append(this.Dialect.FormatTableName(entityType.NativeName.Name)); // builder.Append(" "); // builder.Append(this.Dialect.SetKeyword); // builder.Append(" "); // builder.Append(this.Dialect.FormatColumnName(field.NativeName.Name)); // builder.Append("="); // const string paramName = "val"; // builder.Append(this.Dialect.FormatVariableNameForQueryText(paramName)); // builder.Append(" "); // this.AppendFromAndKeyValues(statement, builder, entityType, keyValues); // // statement... // statement.CommandText = builder.ToString(); // // set... // statement.Parameters.Add(new SqlStatementParameter(paramName, DbType.Binary, new byte[] {})); // // run... // statement.CommandText = builder.ToString(); // this.ExecuteNonQuery(statement); //} public override DataTable ExecuteDataTable(ISqlStatementSource statement) { // mbr - 2014-11-30 - caching means we never dispose commands per usage... //using (IDbCommand command = this.CreateCommand(statement)) SqlStatement realStatement = null; var command = this.CreateCommand(statement, ref realStatement); { try { return(this.CaptureProfile <DataTable>(realStatement, command, SqlMethod.DataSet, (profiling) => { using (SqlDataAdapter adapter = new SqlDataAdapter()) { adapter.SelectCommand = (SqlCommand)command; // run... DataTable table = new DataTable(); adapter.Fill(table); // return... return table; } })); } catch (Exception ex) { throw CreateCommandException("Failed to ExecuteDataTable.", command, ex); } } }
/// <summary> /// Writes an entire document based on a SQL statement. /// </summary> /// <param name="source"></param> public void WriteDocument(ISqlStatementSource source) { if (source == null) { throw new ArgumentNullException("source"); } // execute... DataTable table = Database.ExecuteDataTable(source); if (table == null) { throw new InvalidOperationException("table is null."); } // write... this.WriteDocument(table); }
public static IEnumerable <T> ExecuteEntityCollection <T>(this ISqlStatementSource sql) { return(Database.ExecuteValues <T>(sql)); }
public static IList ExecuteEntityCollection(this ISqlStatementSource sql) { return(Database.ExecuteEntityCollection(sql)); }
public static object ExecuteEntity(this ISqlStatementSource sql) { return(Database.ExecuteEntity(sql)); }
public static int ExecuteNonQuery(this ISqlStatementSource sql) { return(Database.ExecuteNonQuery(sql)); }