Как сохранить файл в базе данных SQL Server, если имеют путь к файлу?

Я создаю некоторое настольное приложение C#, и я должен сохранить файл в базу данных. Я придумал некоторого того, кто выбирает файла, которые дают мне правильный путь файла. Теперь у меня есть вопрос, как сохранить тот файл в базу данных при помощи его пути.

9
задан AdaTheDev 23 January 2010 в 00:58
поделиться

5 ответов

FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
int numBytes = new FileInfo(fileName).Length;
byte[] buff = br.ReadBytes(numBytes);

Тогда вы загружаете его в дБ, как все, что-то еще, я предполагаю, что вы используете варбинарный столбец (BLOB)

5
ответ дан 4 December 2019 в 11:41
поделиться

Это действительно зависит от типа и размера файла. Если это текстовый файл, то вы можете использовать file.readalltext () , чтобы получить строку, которую вы можете сохранить в вашей базе данных.

Если это не текстовый файл, то вы можете использовать file.readallytes () , чтобы получить двоичные данные файла, а затем сохранить это в вашу базу данных.

Быть осторожно быть осторожным, базы данных не являются отличным способом хранения тяжелых файлов (вы столкнетесь с некоторыми вопросами производительности).

10
ответ дан 4 December 2019 в 11:41
поделиться
-

Так будет так, чтобы FileStream будет оно, но с тех пор, как вы используете SQL 2K5, вам придется сделать это прочитанным способом памяти; который потребляет много ресурсов.

Сначала типа столбца Varchar (Max) - ваш друг, это дает вам ~ 2 ГБ данных для игры, что довольно больше всего для большинства применений.

Далее прочитайте данные в байтовом массиве и преобразуйте его в Base64String

FileInfo _fileInfo = new FileInfo(openFileDialog1.FileName);
                if (_fileInfo.Length < 2147483647) //2147483647 - is the max size of the data 1.9gb
                {
                    byte[] _fileData = new byte[_fileInfo.Length];
                    _fileInfo.OpenRead().Read(_fileData, 0, (int)_fileInfo.Length);
                    string _data = Convert.ToBase64String(_fileData);
                }
                else
                {
                    MessageBox.Show("File is too large for database.");
                }

и обратить внимание на процесс восстановления

byte[] _fileData  = Convert.FromBase64String(_data);

, вы захотите утилизировать эти строки как можно быстрее, установив их в String. Как только вы закончите использовать их!

Но если вы можете, просто обновите до 2008 года и используете FileStream.

2
ответ дан 4 December 2019 в 11:41
поделиться

Если вы используете SQL Server 2008, вы можете использовать FileStream (Начало работы Руководство здесь ). Пример использования этой функциональности от C # здесь .

1
ответ дан 4 December 2019 в 11:41
поделиться

Вам понадобится файл в байтовом массиве, а затем сохранить это в качестве поля BLOB в базе данных, возможно, с именем, которое вы хотите дать файл и тип файла.

Вы могли бы просто отменить процесс для вывода файла снова.

0
ответ дан 4 December 2019 в 11:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: