Я испытываю некоторые затруднения для загрузки файла из памяти Поток к базе данных (это видимо в DB как 0x, таким образом, я предполагаю, что это не становится сохраненным правильно). Я не уверен, является ли это проблемой с создаваемым Потоком, или сохраните к дб от потока, должен быть сделан по-другому.
private void test {
byte[] storage = new byte[500000];
using (MemoryStream stream = new MemoryStream(storage))
DocX documentWord = DocX.Create(stream);
// some stuff
documentWord.Save();
databaseFilePut(stream);
}
public static void databaseFilePut(MemoryStream stream) {
byte[] file;
using (var reader = new BinaryReader(stream)) {
file = reader.ReadBytes((int) stream.Length);
// reader.Close();
}
//stream.Close();
//}
using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetailsDZP))
using (var sqlWrite = new SqlCommand("INSERT INTO Raporty (RaportPlik) Values(@File)", varConnection)) {
sqlWrite.Parameters.Add("@File", SqlDbType.VarBinary, file.Length).Value = file;
sqlWrite.ExecuteNonQuery();
}
}
Что я делаю неправильно? Я пользуюсь библиотекой Docx codeplex.
Вы пишете в поток, а затем сразу пытаетесь читать из него без перемотки ... так что нет данных для чтения.
К счастью, в любом случае есть очень простой способ упростить код:
byte[] file = stream.ToArray();
Однако у вас есть еще одна потенциальная проблема:
byte[] storage = new byte[500000];
using (MemoryStream stream = new MemoryStream(storage))
...
Это заставит MemoryStream
исправить размером 500К - ни больше, ни меньше. Я подозреваю, что это не то, что вам нужно; Я предлагаю вам избавиться от переменной хранилища
и просто вызвать конструктор MemoryStream
без параметров.