открытие файла с базы данных SQL Server

295
02 ноября 2021, 13:20

Такая ситуация, я загоняю файл в базу данных

private void UploadFile()
        {
            int selectId = 0;
            string filePath;
            OpenFileDialog fileDialog = new OpenFileDialog();
            if (fileDialog.ShowDialog() == DialogResult.OK)
            {
                filePath = fileDialog.FileName;
                //Получаем имя файла
                string fileName = filePath.Substring(filePath.LastIndexOf('\\') + 1);
                //Получаем расширение файла
                string fileExtension = filePath.Substring(filePath.LastIndexOf('.') + 1);
                sendMessageTextBox.Text = fileName;
                //Массив для хранения бинарных данных файла
                byte[] binaryFile;
                using (FileStream fs = new FileStream(filePath, FileMode.Open))
                {
                    binaryFile = new byte[fs.Length];
                    fs.Read(binaryFile, 0, binaryFile.Length);
                }                    
                        //Запрос на добавление сообщения в таблицу
                        int rowindex = usersDataGridView.CurrentCell.RowIndex;
                        selectId = Convert.ToInt32(usersDataGridView.Rows[rowindex].Cells[1].Value);
                        string querryAddMess = "insert into sta_Messages(\"SetUser_id\", \"GetUser_id\", \"File_Name\", \"File_Ext\", \"File_Content\", \"SetDate\")" + "values(" + Convert.ToInt32(loadData.LastId) + ", '" + selectId + "','" + fileName + "','" + fileExtension + "','" + binaryFile + "', " + "CAST(GETDATE() AS BINARY(8))" + ")";
                        using (SqlCommand cmdAddMess = new SqlCommand(querryAddMess, conn))
                        {
                            try
                            {
                                SqlDataReader rezultAddMess = cmdAddMess.ExecuteReader();                                    
                            }
                            catch (Exception ex)
                            {
                                MessageBox.Show(ex.Message);
                            }
                        }
                        GetData();
                    }
                    catch
                    {
                        MessageBox.Show("Ошибка!");
                    }
                }
            }
        }

После добавления файла в базу данных, он также отображается в DataGridView. Как мне теперь открыть файл, который выбираю в гриде? Пробовал таким методом:

private void OpenFile()
        {
            var loadData = cs.LoadFile("DataConnection.xml");
            string connString = String.Format("Data Source={0};Initial Catalog={1};User Id={2};Password={3}", loadData.Host, loadData.Database, loadData.UserId, loadData.PWD);
            List<FileData> fileDatas = new List<FileData>();
            using (SqlConnection conn = new SqlConnection(connString))
            {
                try
                {
                    conn.Open();
                int rowindex = postsDataGridView.CurrentCell.RowIndex;
                int selectId = Convert.ToInt32(postsDataGridView.Rows[rowindex].Cells[0].Value);
                string queryOpen = String.Format("select \"File_Name\", \"File_Ext\", \"File_Content\" from sta_Messages where \"id\" = {0}", selectId);
                SqlCommand command = new SqlCommand(queryOpen, conn);
                SqlDataReader reader = command.ExecuteReader();
                //Получаем значения файла с БД
                while (reader.Read())
                {
                    string fileName = reader.GetString(0);
                    string fileExt = reader.GetString(1);
                    byte[] fileContent = (byte[])reader.GetValue(2);
                    FileData fileData = new FileData(fileName, fileExt, fileContent);
                    fileDatas.Add(fileData);
                }
                //Сохраняем файл на диск
                if (fileDatas.Count > 0)
                {
                    using (FileStream fs = new FileStream(fileDatas[0].FileName, FileMode.OpenOrCreate))
                    {
                        fs.Write(fileDatas[0].FileContent, 0, fileDatas[0].FileContent.Length);                       
                        Process.Start(fileDatas[0].FileName);
                    }
                }
                }
                catch
                {
                    MessageBox.Show("Ошибка!");
                }
            }
        }

Выпадает ошибка "не удается найти данный файл", хотя на дебагере показывает, что вытягивает с базы все корректно.

Что неправильно делаю?

READ ALSO
Задание связанное с CharArray C#

Задание связанное с CharArray C#

Помогите сделать задание, очень нужноВот условие: Задан текст, состоящий из произвольной последовательности буквенных символов

96
Ошибка при создании файла в любой папке

Ошибка при создании файла в любой папке

Пытаюсь создать файл на диске D:\NewFolder\imagejpg, система доходит до создания

171
Многопоточная запись File.AppendAllText()

Многопоточная запись File.AppendAllText()

Если этот метод будет выполняться в многопоточном режиме - не будет ли возникать исключение "Этот процесс занят другим процессом" ?

162
&quot;If {} else {}&quot; или &quot;try {} catch() {}&quot; C#

"If {} else {}" или "try {} catch() {}" C#

Столкнулся с вопросом использования условной конструкции или перехвата исключенияЧитал информацию, что "try {} catch() {}" потребляет больше ресурсов,...

116