Exemple #1
0
        ///// <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);
                }
            }
        }
Exemple #2
0
        /// <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));
 }