2013-11-19 4 views
1

Я получаю необработанные двоичные данные с SQL-сервера. Во-первых, я сохраняю его как файл, потому что загружаю файл и рисую серию точек на диаграмме. Но теперь я также хочу сохранить его на другом сервере, когда пользователь нажимает кнопку. Это ужасно глупо:Получение байтового массива вместо сохранения байтового массива в виде файла

  1. нагрузки двоичных данных с сервера
  2. «Преобразование» в файл
  3. сохранить его на пути
  4. Загрузить с этого пути.
  5. Рисовать диаграмму.
  6. Загрузка с этого пути
  7. Сохранить на сервер.

Когда я мог бы делать:

  1. нагрузки двоичные данные с сервера
  2. 'Преобразование' в Byte [] или какой-либо другой вид массива.
  3. Нарисуйте диаграмму из этого массива
  4. Сохраните этот массив на сервере.

Я думаю, что это должен быть массив байтов, хотя, как сервер, который я загружаю, и сервер, который я сохраняю, имеет varbinary (max) типа данных. Я прикрепил изображение того, что именно я хочу, чтобы программа выполняла.

Так что мой вопрос: Остановить сохранение в пути с помощью BinaryWriter, и начать получать байт [] Я могу использовать несколько раз

Это та часть, где я думаю, что это экономит на данной FilePath.

string fullPath = C:/Users/Mathias/Documents/Lektier/IHA/3. Semester/Projekt/Temporary Blob + "/" + fileName; 
     while (reader.Read()) 
     { 
      FileStream fs = new FileStream(fullPath, FileMode.OpenOrCreate, FileAccess.Write); 
      BinaryWriter writer = new BinaryWriter(fs); 
      CurrentIndex = 0; 
      BytesReturned = reader.GetBytes(1, CurrentIndex, Blob, 0, BufferSize); 
      while (BytesReturned == BufferSize) 
      { 
       writer.Write(Blob); 
       writer.Flush(); 
       CurrentIndex += BufferSize; 
       BytesReturned = reader.GetBytes(1, CurrentIndex, Blob, 0, BufferSize); 
      } 

      writer.Write(Blob, 0, (int)BytesReturned); 

      writer.Flush(); writer.Close(); 
     } 

My drawing skills are subpar

Если вы хотите полный исходный код для этой формы, пожалуйста, обращайтесь. Сейчас это просто беспорядочно, поэтому я не видел смысла вставлять все это.

+0

важный бит может все, что вы используете, чтобы нарисовать график принять какой-либо другой аргумент, чем имя файла ... –

+0

хехе это делает. Я преобразовываю byte [] в строку, затем разбивая строку для каждой строки в ней ('\ n') Затем я сохраняю ее в строчном массиве и запускаю foreach для каждой строки в этой строке [] и добавьте точку в серию. –

ответ

5

Похоже, вы просто должны писать в MemoryStream:

var stream = new MemoryStream(); 
var buffer = new byte[8 * 1024]; 
long bytesRead; 
long index = 0; 
while ((bytesRead = reader.GetBytes(1, index, buffer, 0, buffer.Length)) > 0) 
{ 
    stream.Write(buffer, 0, (int) bytesRead); 
    currentIndex += bytesRead; 
} 
byte[] data = stream.ToArray(); 
+0

Это кажется очень правильным! Я пробую этот код, и я получаю это в цикле while; Неверная попытка прочитать, когда данных нет. Я выбираю правильный столбец, и там определенно присутствуют данные. Мой читатель: SqlDataReader reader = LoadCmd.ExecuteReader (CommandBehavior.SequentialAccess); Моя команда: SqlCommand LoadCmd = новый SqlCommand ("Выбрать ekgmaaleid, raa_data, borger_fornavn, borger_efternavn, borger_beskrivelse, borger_cprnr Дато, maaleformat_type, fil_navn от EKG_Temp где fil_navn = @fil_navn", GlobalVariables.con); –

+0

Ха-ха глупо. Я никогда не читал читателя. Решаемые. Спасибо вам за это, друг. –

Смежные вопросы