Esempio n. 1
0
        // pobierz: download
        // Rysunek: drawing
        //take a picture from database and convert to Image type
        public System.Drawing.Image GetDrawing(int idOfOID)
        {
            System.Drawing.Image img;

            using (Npgsql.NpgsqlConnection connection = new Npgsql.NpgsqlConnection(GetConnectionString()))
            {
                if (connection.State != System.Data.ConnectionState.Open)
                {
                    connection.Open();
                }

                using (Npgsql.NpgsqlTransaction trans = connection.BeginTransaction())
                {
                    NpgsqlTypes.LargeObjectManager lbm = new NpgsqlTypes.LargeObjectManager(connection);
                    NpgsqlTypes.LargeObject        lo  = lbm.Open(takeOID(idOfOID), NpgsqlTypes.LargeObjectManager.READWRITE); //take picture oid from metod takeOID
                    byte[] buf = new byte[lo.Size()];
                    buf = lo.Read(lo.Size());
                    using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
                    {
                        ms.Write(buf, 0, lo.Size());
                        img = System.Drawing.Image.FromStream(ms);
                    } // End Using ms

                    lo.Close();
                    trans.Commit();

                    if (connection.State != System.Data.ConnectionState.Closed)
                    {
                        connection.Close();
                    }
                } // End Using trans
            }     // End Using connection

            return(img);
        } // End Function GetDrawing
Esempio n. 2
0
        } // End Function GetLargeDrawing

        // http://stackoverflow.com/questions/14509747/inserting-large-object-into-postgresql-returns-53200-out-of-memory-error
        // https://github.com/npgsql/Npgsql/wiki/User-Manual
        public int InsertLargeObject()
        {
            int noid;

            byte[] BinaryData = new byte[123];

            // Npgsql.NpgsqlCommand cmd ;
            // long lng = cmd.LastInsertedOID;

            using (Npgsql.NpgsqlConnection connection = new Npgsql.NpgsqlConnection(GetConnectionString()))
            {
                using (Npgsql.NpgsqlTransaction transaction = connection.BeginTransaction())
                {
                    try
                    {
                        NpgsqlTypes.LargeObjectManager manager = new NpgsqlTypes.LargeObjectManager(connection);
                        noid = manager.Create(NpgsqlTypes.LargeObjectManager.READWRITE);
                        NpgsqlTypes.LargeObject lo = manager.Open(noid, NpgsqlTypes.LargeObjectManager.READWRITE);

                        // lo.Write(BinaryData);
                        int i = 0;
                        do
                        {
                            int length = 1000;
                            if (i + length > BinaryData.Length)
                            {
                                length = BinaryData.Length - i;
                            }

                            byte[] chunk = new byte[length];
                            System.Array.Copy(BinaryData, i, chunk, 0, length);
                            lo.Write(chunk, 0, length);
                            i += length;
                        } while (i < BinaryData.Length);

                        lo.Close();
                        transaction.Commit();
                    } // End Try
                    catch
                    {
                        transaction.Rollback();
                        throw;
                    } // End Catch

                    return(noid);
                } // End Using transaction
            }     // End using connection
        }         // End Function InsertLargeObject
Esempio n. 3
0
        } // End Function GetDrawing

        public System.Drawing.Image GetLargeDrawing(int idOfOID)
        {
            System.Drawing.Image img;

            using (Npgsql.NpgsqlConnection connection = new Npgsql.NpgsqlConnection(GetConnectionString()))
            {
                lock (connection)
                {
                    if (connection.State != System.Data.ConnectionState.Open)
                    {
                        connection.Open();
                    }

                    using (Npgsql.NpgsqlTransaction trans = connection.BeginTransaction())
                    {
                        NpgsqlTypes.LargeObjectManager lbm = new NpgsqlTypes.LargeObjectManager(connection);
                        NpgsqlTypes.LargeObject        lo  = lbm.Open(takeOID(idOfOID), NpgsqlTypes.LargeObjectManager.READWRITE); //take picture oid from metod takeOID
                        byte[] buffer = new byte[32768];

                        using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
                        {
                            int read;
                            while ((read = lo.Read(buffer, 0, buffer.Length)) > 0)
                            {
                                ms.Write(buffer, 0, read);
                            } // Whend

                            img = System.Drawing.Image.FromStream(ms);
                        } // End Using ms

                        lo.Close();
                        trans.Commit();

                        if (connection.State != System.Data.ConnectionState.Closed)
                        {
                            connection.Close();
                        }
                    } // End Using trans
                }     // End lock connection
            }         // End Using connection

            return(img);
        } // End Function GetLargeDrawing