Moustafa Safwat

http://www.moustafasafwat.com

Wednesday, December 14, 2011

Using ADO.NET

1- Using ADO.NET With Connected Mode    


            string connectionString = "Provider=sqloledb;Data Source=.;Initial Catalog=ProductsDB;User Id=sa;Password=";

            using (SqlConnection con = new SqlConnection(connectionString))
            {
                con.Open();

                using (SqlCommand cmd = con.CreateCommand())
                {
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = "SELECT pub_id, logo FROM pub_info";

                    // Open the connection and read data into the DataReader.
                    using (SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
                    {
                        FileStream fs;                          // Writes the BLOB to a file (*.bmp).
                        BinaryWriter bw;                        // Streams the BLOB to the FileStream object.

                        int bufferSize = 100;                   // Size of the BLOB buffer.
                        byte[] outbyte = new byte[bufferSize];  // The BLOB byte[] buffer to be filled by GetBytes.
                        long retval;                            // The bytes returned from GetBytes.
                        long startIndex = 0;                    // The starting position in the BLOB output.

                        string pub_id = "";                     // The publisher id to use in the file name.

                        while (reader.Read())
                        {
                            // Get the publisher id, which must occur before getting the logo.
                            pub_id = reader.GetString(0);

                            // Create a file to hold the output.
                            fs = new FileStream("logo" + pub_id + ".bmp", FileMode.OpenOrCreate, FileAccess.Write);
                            bw = new BinaryWriter(fs);

                            // Reset the starting byte for the new BLOB.
                            startIndex = 0;

                            // Read the bytes into outbyte[] and retain the number of bytes returned.
                            retval = reader.GetBytes(1, startIndex, outbyte, 0, bufferSize);

                            // Continue reading and writing while there are bytes beyond the size of the buffer.
                            while (retval == bufferSize)
                            {
                                bw.Write(outbyte);
                                bw.Flush();

                                // Reposition the start index to the end of the last buffer and fill the buffer.
                                startIndex += bufferSize;
                                retval = reader.GetBytes(1, startIndex, outbyte, 0, bufferSize);
                            }

                            // Write the remaining buffer.
                            bw.Write(outbyte, 0, (int)retval - 1);
                            bw.Flush();

                            // Close the output file.
                            bw.Close();
                            fs.Close();
                        }

                        reader.Close();
                    }
                }

                con.Close();
            }

No comments:

Post a Comment