1

I am developing an application in VS2010 C# to transfer data from MySQL to Oracle and reverse again.

In it there are some fields containing BLOB type data and I need that data to transfer as quick as possible.

I tried to do this by below two methods.

public static MemoryStream DatabaseFileRead(MySqlConnection mcon)
 {
  var memoryStream = new MemoryStream();
  using (var sqlQuery = new MySqlCommand(@"SELECT statement_file from user_account_statement", mcon))
  {
    using (var sqlQueryResult = sqlQuery.ExecuteReader())
    if (sqlQueryResult != null)
    {
     sqlQueryResult.Read();
     var blob = new Byte[(sqlQueryResult.GetBytes(0, 0, null, 0, int.MaxValue))];
     sqlQueryResult.GetBytes(0, 0, blob, 0, blob.Length);
     //Updated.
     memoryStream.Write(blob, 0, blob.Length);
    }
  }
  return memoryStream;
 }

 public static int DatabaseFilePut(MemoryStream fileToPut,OracleConnection con)
  {
   int varID = 0;
   byte[] file = fileToPut.ToArray();
   const string preparedCommand = @"
   INSERT INTO user_account_statement(statement_id,session_key,login_id,user_id,account_number,from_date,todate,ipaddress,create_date_time,STATEMENT_FILE)VALUES(1070,'fe79e0345986b5a439c26f731234868b53f877366f529','2335','204254','108142',@frmDate,@toDate,'106.79.126.249','2014-08-23 16:45:06',@File)";
   using (var sqlWrite = new OracleCommand(preparedCommand, con))
   {
    sqlWrite.Parameters.Add("@frmDate", OracleDbType.Date).Value = "2014-08-18";
    sqlWrite.Parameters.Add("@toDate", OracleDbType.Date).Value = "2014-08-23";
    sqlWrite.Parameters.Add("@File", OracleDbType.Blob, file.Length).Value = file;
    using (var sqlWriteQuery = sqlWrite.ExecuteReader())
    while (sqlWriteQuery != null && sqlWriteQuery.Read())
    {
     varID = sqlWriteQuery["statement_Id"] is int ? (int)sqlWriteQuery["statement_Id"] : 0;
    }
   }
   return varID;
  }

But not getting the exact result. Do any one have better solution for this. Thanks in advance.

Ashok
  • 1,868
  • 6
  • 36
  • 70
  • You didn't assign any value to `memoryStream`. – Ruslan Veselov Sep 01 '14 at 09:00
  • @RuslanVeselov I assigned value to memoryStream but forgoten to update code. Please check now. – Ashok Sep 01 '14 at 09:36
  • You should set the `Position` to 0 effectively "rewinds" the stream, so that you will read it back in from the beginning. Also, you can find this interesting: http://stackoverflow.com/questions/221925/creating-a-byte-array-from-a-stream – Ruslan Veselov Sep 01 '14 at 09:53

0 Answers0