Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 odp.net + c# + большой файл загнать в БД  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54381
Коллеги!
с шарпами работали, но мало
Возник вопрос по загрузке в БД файлов не такого уж и большого размера - 150м. Но памяти на хватает на сервере WIn-2003

Вот такой пример, в котором файл хоть и через стрим, но все равно загружается полностью в приложение в переменную типа byte[]
Такой метод кажется неприличным, но какой правильный с этими средствами разработки (odp.net + c#)?

+
                    //http://www.akadia.com/services/dotnet_orablobs.html
                    // FileStream to get the Employee Photo
                    FileStream fs;

                    // Get Image Data from the Filesystem if User has loaded a Photo
                    // by the 'Browse' button
                    if (_strImageName != "")
                    {
                        fs = new FileStream(@_strImageName, FileMode.Open,FileAccess.Read);
                        _imageLength = (int)fs.Length;

                        // Create a byte array of file stream length
                        _imageData = new byte[fs.Length];

                        // Read block of bytes from stream into the byte array
                        fs.Read(_imageData,0,System.Convert.ToInt32(fs.Length));

                        // Close the File Stream
                        fs.Close();
                    }

                    // Instantiate an OracleDataAdapter object with the
                    // appropriate query
                    empAdapter = new OracleDataAdapter(
                        "SELECT empno, ename, job, photo" +
                        "  FROM emp WHERE empno = " + _curEmpNo, _conn);

                    // Instantiate a DataSet object
                    empDataSet= new DataSet("emp");

                    // Create an UPDATE command as a template for the
                    // OracleDataAdapter.
                    empAdapter.UpdateCommand = new OracleCommand
                        ("UPDATE emp SET " +
                        "job = :iJOB, "+
                        "photo = :iPHOTO " +
                        "WHERE empno = :iEMPNO", _conn);

                    // Add the Parameters for the UPDATE Command
                    empAdapter.UpdateCommand.Parameters.Add(":iJOB",
                       OracleDbType.Varchar2, 9, "job");
                    empAdapter.UpdateCommand.Parameters.Add(":iPHOTO",
                       OracleDbType.Blob, _imageLength, "photo");
                    empAdapter.UpdateCommand.Parameters.Add(":iEMPNO",
                       OracleDbType.Int16, 0, "empno");

                    // Configure the schema to match with the Data Source.
                    // AddWithKey sets the Primary Key information to complete the
                    // schema information
                    empAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;

                    // Configures the schema to match with Data Source
                    empAdapter.FillSchema(empDataSet, SchemaType.Source, "emp");

                    // Fills the DataSet with 'EMP' table data
                    empAdapter.Fill(empDataSet,"emp");

                    // Get the current Employee ID row for updation
                    DataTable empTable = empDataSet.Tables["emp"];
                    empRow = empTable.Rows.Find(_curEmpNo);

                    // Start the edit operation on the current row in
                    // the 'emp' table within the dataset.
                    empRow.BeginEdit();

                    // Assign the value of the Job Title
                    empRow["job"] = txtEmpJob.Text;

                    // Assign the value of the Photo if not empty
                    if (_imageData.Length != 0)
                    {
                        empRow["photo"] = _imageData;
                    }

                    // End the editing current row operation
                    empRow.EndEdit();

                    // Update the database table 'EMP'
                    empAdapter.Update(empDataSet,"emp");
2 дек 16, 12:31    [19959202]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить